【发布时间】:2011-09-14 18:44:57
【问题描述】:
我有两张桌子。第一个包含所有项目信息,第二个包含项目 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
- code = 我仅用于搜索的代码。
- expire = 过期时间 项目
我使用 SQL_CALC_FOUND_ROWS 是因为我想显示总匹配结果。我在页面上只显示 50 个项目 (LIMIT 0, 50)。
当我执行该查询时,我的 php 页面大约需要 5 秒才能加载(没有查询时不到 1 秒)。
- 有没有办法优化它?
- 使用 SQL_CALC_FOUND_ROWS 还是使用 SELECT COUNT(*) 进行第二个查询更快?
- 我听说过索引,但我不知道如何使用它们以及它们的作用。他们能帮忙吗?
【问题讨论】:
-
两张表有什么索引?请张贴(在问题中添加表格的定义)。
标签: php mysql optimization query-optimization