加快使用庞大的SQL表格

时间:2010-12-29 18:03:00

标签: php sql mysql

在我的网站上,我正在试验非常大的表格。一个表'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和父。我不太了解使用索引是否诚实,但最好有两个常用索引吗?在第一个名称是独特的,也许这可能有所帮助?或者索引还可以吗?在那种情况下,我可以改进什么?

非常感谢

3 个答案:

答案 0 :(得分:3)

建议您查看解释计划以查看是否正在使用索引。

答案 1 :(得分:1)

我很难找到关于“覆盖指数”的好文章,但你可以检查一下:http://www.mysqlperformanceblog.com/2006/11/23/covering-index-and-prefix-indexes/

基本思想是,如果您在1或2列的表上有索引,但是您选择的数据不仅仅是那些列,那么您的查询将不得不执行另一个表扫描以提取数据从表中。

覆盖索引将包括初始搜索中您想要的其他列,从而大大提高性能。

答案 2 :(得分:1)

首先,尝试在items_parent表上放置一个多列索引,确保首先列出父列,然后列出第二个id列。

此外,如果您不需要两个表中的所有列,请不要执行“选择*”。至少在这里,您将从每个表中获取您要加入的列的附加列。基本上,2列中的数据相同,这是浪费时间和带宽。