我遇到选择计数(*)的问题,因为太慢而且我不知道原因:
表: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 !!!
我什么都不懂,有人可以帮助我吗?我会非常感激的。谢谢,
达尼。
答案 0 :(得分:0)
两个查询的解释输出是: