我是MySQL的新手,我需要在現有表(其中大約包含200K行)上添加索引。綜合索引
Table mytable: (id:integer, created_time:timestamp, deleted_time:timestamp)
我有2個查詢,其需要從索引中獲益:
select s.id from mytable s
where s.completed_time is not null
and s.completed_time < ?
and (s.deleted_time is null
or s.deleted_time >= ?);
和:
select s.id from mytable s
where
s.completed_time is not null
and (
(s.deleted_time is not null
and s.deleted_time >= ?
and s.deleted_time < ?)
or (s.completed_time >= ?
and s.completed_time < ?)) ;
我正在考慮引入的多列索引(上completed_time和deleted_time) 但是,我不確定條件「s.completed_time是否爲空」與使這些查詢使用組合索引的條件相匹配。
你對什麼是最好的(複合索引或2個索引)有什麼想法嗎?我試圖用「解釋」來弄清楚什麼是最好的,但我不確定如何解釋結果。
更一般地說:對於在(column1,column2)上有一個複合索引的表,我知道只對column2進行過濾不會使用索引。 但是,如果我引入了像(column1> MIN_VALUE)這樣的虛擬條件,或者(column1不是null),如果這樣做是正確的呢?
謝謝!
我注意到這兩個列允許空值,這是你將要改變的,因爲它會對你的索引產生負面影響,更新那些空值設置爲空白時間戳= 0的表,將字段更改爲非空,並且我會推薦一個單獨的複合索引,否則測試兩者並查看優化器路徑(使用解釋)和結果速度進行比較。 –