我有一张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秒才能执行。我不太清楚还能做些什么才能让它跑得更快。是一个不同的索引答案或其他我没想到的东西?感谢。
答案 0 :(得分:1)
一般来说,这里的技巧是创建一个首先过滤的索引,减少行数(“基数”),然后再次应用排序:
CREATE INDEX `index_companies_on_dup_checked_name`
ON `companies` (`dup_checked`,`name`)
这应该为您提供所需的范围。