我是 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 is not null”是否符合使这些查询使用复合索引的条件。
您对什么是最好的(复合索引或 2 个索引)有任何想法吗?我正在尝试使用“解释”来找出最好的方法,但我不确定如何解释结果。
更一般地说:对于(column1,column2)上具有复合索引的表,我知道仅对column2进行过滤不会使用索引。但是,如果我在正确的情况下引入类似 (column1 > MIN_VALUE) 或 (column1 is not null) 的虚拟条件会怎样?
谢谢!