Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用适当的索引优化mysql查询_Mysql - Fatal编程技术网

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

使用适当的索引优化mysql查询,mysql,Mysql,我有一张1510万条记录的表格。我正在对其运行以下查询以处理重复检查的记录 select id, name, state, external_id from companies where dup_checked=0 order by name limit 500; 当我在查询中使用explain extended时,它告诉我它使用的是公司名称索引上的索引,这只是公司名称的索引。我想这是因为订货。我尝试根据name和dup_checked字段创建其他索引,希望它使用这个索引,因为它可能会

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

select id, name, state, external_id 
from companies
where dup_checked=0 
order by name 
limit 500;
当我在查询中使用explain extended时,它告诉我它使用的是公司名称索引上的索引,这只是公司名称的索引。我想这是因为订货。我尝试根据name和dup_checked字段创建其他索引,希望它使用这个索引,因为它可能会更快,但它仍然使用name索引上的索引


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

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

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

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

通常您构造索引,首先包括
其中的
条件,然后包括
顺序
条件。在本例中:
dup\u选中,name
。如何指定索引中字段的顺序?我使用的是mysql workbench,它只允许您勾选索引中包含的字段。这会在很大程度上影响性能吗?我还想知道,如果我处理500条记录并将它们的dup_checked标志标记为true,那么需要更新reindex,对吗?这意味着可能会减慢速度?顺序特别重要。考虑一本电话簿:<代码> LASTYNAMED,FILSTESTNODY < /代码>。查找所有名为“鲍勃”的人是没有用的,但查找所有最后一个名为“史密斯”的人很容易。你总是可以用一个语句手动完成。完成了,谢谢!