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行,但是实际传输到页面的数据量是多少? 还有什么其他脚本?您是否正在处理结果,并且脚本已优化? 只是以为我还会列出您应该考虑的其他一些内容。     

要回复问题请先登录注册