我有一张大约100万行的MyISAM表。
SELECT * FROM table WHERE colA='ABC' AND (colB='123' OR colC='123');
上面的查询需要10秒才能运行。所有相关列都已编入索引。
但是当我把它拆分成如下......
SELECT * FROM table WHERE colA='ABC' AND colB='123';
SELECT * FROM table WHERE colA='ABC' AND colC='123';
每个单独的查询需要0.002秒。
什么给出,以及如何优化表/查询?
答案 0 :(得分:0)
( SELECT * FROM table WHERE colA='ABC' AND colB='123' )
UNION DISTINCT
( SELECT * FROM table WHERE colA='ABC' AND colC='123' )
;
并且
INDEX(colA, colB),
INDEX(colA, colC)
你应该考虑转移到InnoDB,尽管这个问题可能无关紧要。
以下是UNION
的工作原理:
SELECT
。由于建议的索引,它们将非常有效。 所有行被触及'在原始查询中(使用OR
)。
使用UNION
:
SELECTs
。