我有以下查询:
SELECT *
FROM myTable
WHERE columnOne = 1 OR columnTwo = 1;
我应该使用两个列索引(一个在columnOne
上,一个在columnTwo
上)还是一个复合索引,大约是columnOne, columnTwo
?
我正在使用InnoDB。
答案 0 :(得分:3)
复合索引对此查询没有多大帮助。你会想要两个单独的索引。但是,有时or
无法有效优化。
这是另一种最适合这两个索引的方法,mytable(columnOne)
和mytable(columnOne, columnTwo)
:
select *
from mytable
where columnOne = 1
union all
select *
from mytable t
where columnTwo = 1 and columnOne <> 1;