SELECT COUNT不使用索引

时间:2014-12-09 11:13:25

标签: mysql performance count indexing where

我遇到选择计数(*)的问题,因为太慢而且我不知道原因:

:tabla_maestra(800万个寄存器)

索引:' codigo_postal'在' codigo_postal' column,这是一个char(5)

查询

SELECT COUNT(*) AS total
FROM tabla_maestra tm
WHERE (tm.nombre like '%name%' OR tm.empresa_apellido1 like '%enterprise_name%') AND
      (tm.codigo_postal like '08%');

此查询耗时太长(约4秒),因为它不使用任何索引。也就是说,这个查询正在进行全扫描(800万个寄存器)。谁能解释我为什么?

我已将此查询重写为:

SELECT COUNT(*) AS total
FROM tabla_maestra tm FORCE INDEX (codigo_postal)
WHERE (tm.nombre like '%javier%' OR tm.empresa_apellido1 like '%javier%') AND
      (tm.codigo_postal like '08%');

现在,此查询使用' codigo_postal'索引,但慢:8秒而不是4 !!!

我什么都不懂,有人可以帮助我吗?我会非常感激的。谢谢,
达尼。

1 个答案:

答案 0 :(得分:0)

两个查询的解释输出是:

enter image description here