在我的网站上,我正在试验非常大的表格。一个表'items'有大约200万条记录,第二个'items_parents'大约有600万条记录。令人惊讶的是我需要加入这些表格。当我在MySQL中尝试这个SQL命令时:
SELECT *
FROM `items_parent`
JOIN items ON items_parent.id = items.id
WHERE items_parent.parent = 4706421
大约需要7秒,这对网站来说太简单了。在两个表上,我有两个索引(BTREE类型),1。ID和名称 - 上2. ID和父。我不太了解使用索引是否诚实,但最好有两个常用索引吗?在第一个名称是独特的,也许这可能有所帮助?或者索引还可以吗?在那种情况下,我可以改进什么?
非常感谢
答案 0 :(得分:3)
建议您查看解释计划以查看是否正在使用索引。
答案 1 :(得分:1)
我很难找到关于“覆盖指数”的好文章,但你可以检查一下:http://www.mysqlperformanceblog.com/2006/11/23/covering-index-and-prefix-indexes/
基本思想是,如果您在1或2列的表上有索引,但是您选择的数据不仅仅是那些列,那么您的查询将不得不执行另一个表扫描以提取数据从表中。
覆盖索引将包括初始搜索中您想要的其他列,从而大大提高性能。
答案 2 :(得分:1)
首先,尝试在items_parent表上放置一个多列索引,确保首先列出父列,然后列出第二个id列。
此外,如果您不需要两个表中的所有列,请不要执行“选择*”。至少在这里,您将从每个表中获取您要加入的列的附加列。基本上,2列中的数据相同,这是浪费时间和带宽。