使用适当的索引优化mysql查询

时间:2015-10-05 17:08:38

标签: mysql

我有一张1510万条记录表。我正在运行以下查询来处理重复检查的记录。

select id, name, state, external_id 
from companies
where dup_checked=0 
order by name 
limit 500;

当我在查询中使用explain扩展时,它告诉我它使用的是index_companies_on_name索引,它只是公司名称的索引。我假设这是由于订购。我尝试根据名称和dup_checked字段创建其他索引,希望它可以使用这个,因为它可能更快,但它仍然使用index_companies_on_name索引。

最初它足够快,但现在我们还有330万条记录需要检查,这个查询最多需要90秒才能执行。我不太清楚还能做些什么才能让它跑得更快。是一个不同的索引答案或其他我没想到的东西?感谢。

1 个答案:

答案 0 :(得分:1)

一般来说,这里的技巧是创建一个首先过滤的索引,减少行数(“基数”),然后再次应用排序:

CREATE INDEX `index_companies_on_dup_checked_name`
  ON `companies` (`dup_checked`,`name`)

这应该为您提供所需的范围。