微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL选择具有连接的查询并优化了很多结果

如何解决MySQL选择具有连接的查询并优化了很多结果

| 我有两张桌子。第一个包含所有项目信息,第二个包含具有类别ID的项目ID。这样做的原因是,一项可以属于多个类别。我的桌子上大约有500 000件物品。 这是一个选择查询示例:
SELECT sql_CALC_FOUND_ROWS items.* 
FROM items 
    INNER JOIN cat
        ON items.iid=cat.iid 
WHERE (items.expire>\'1308061323\' AND cat.cid = \'1\') 
AND (items.code=71 OR items.code=23) 
ORDER BY price DESC 
LIMIT 0,50
iid =商品ID cid =类别ID 代码=我仅用于搜索代码。 expire =的到期时间 项目 我使用sql_CALC_FOUND_ROWS,因为我想显示总的匹配结果。我在页面上仅显示50个项目(LIMIT 0、50)。 当我执行该查询时,我的PHP页面需要大约5秒钟的加载时间(如果没有查询,则少于1秒)。 有没有优化的方法? 使用sql_CALC_FOUND_ROWS或带有SELECT COUNT(*)的第二个查询是否更快? 我听说过索引,但是我不知道如何使用索引以及它们的作用。他们可以帮忙吗?     

解决方法

         是的,您可以使用索引。 最好使用2个查询,请参见此处: 在MySQL中使用SQL_CALC_FOUND_ROWS时,对查询速度有影响吗?而在这里:是SQL_CALC_FOUND_ROWS还是不是SQL_CALC_FOUND_ROWS? 索引可帮助MySQL更快地找到数据。在这里,您需要一个有关代码,cid,过期和价格的索引。 您可以通过执行以下命令在items.code上创建索引:
CREATE INDEX idx_items_code ON items (code);
它应该立即改善您的查询。 我的建议是通过阅读stackoverflow.com上的一些文章来了解索引的工作方式。 这是一个很好的例子:SQL Server中的索引是什么? 编辑:   如果索引那么好,我可以创建   每个字段的索引。什么是   使用索引的后果? 实际上,索引是灵丹妙药。它每次都有效。查询时间过长,繁荣,请建立索引。这就是为什么在创建主键时,MySQL向该字段添加索引的原因。 另一方面,索引占用了服务器上的空间,其他操作:删除,更新,插入将花费更多时间。 因此,如果您不经常删除,更新或插入并选择很多内容,则几乎可以为每个字段创建一个索引。 最好的办法是太全面地了解索引的使用,因此您可以做出很好的选择。     ,        在
cat
表格上为字段
iid
创建索引 在
items
表格上为字段
code,iid,expire
iid,code,expire
创建一个索引。看看哪个最快。 您可以在选择项前面使用ѭ7来获取有关如何优化选择项的信息。 http://dev.mysql.com/doc/refman/5.0/en/explain-output.html     ,        如果您不对数据库进行任何选择,则页面的加载总是更快。 我认为您的问题与服务页面的时间长短有关,而不是功能的具体用途。 您是否尝试过在SQL之前和之后设置时间戳,以确定确切的时间。您说您将结果集限制为50行,但是实际传输到页面的数据量是多少? 还有什么其他脚本?您是否正在处理结果,并且脚本已优化? 只是以为我还会列出您应该考虑的其他一些内容。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。