Query-Performance
MariaDB 查詢優化器忽略索引
- MariaDB 版本 10.5.15
- 簡單表,兩列帶索引
如果我對錶進行查詢並在 where 條件中使用具有索引的兩列,則不使用索引。為什麼?
CREATE TABLE `logs` ( `log_id` int(10) NOT NULL AUTO_INCREMENT, `date` datetime DEFAULT NULL, `status` int(10) DEFAULT 0, `text` varchar(255) DEFAULT NULL, PRIMARY KEY (`log_id`), KEY `status` (`status`), KEY `date` (`date`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
日期在哪裡
analyze select count(*) from logs where `date` < "2022-01-01 00:00:00"
使用索引 => 1.4s
在哪裡狀態
analyze select count(*) from logs where status = 860
使用索引 => ~0.9s
日期和狀態
analyze select count(*) from logs where status = 860 and `date` < "2022-01-01 00:00:00"
不使用索引 => ~7s
ALTER TABLE logs DROP INDEX(status) ADD INDEX(status, date)
添加的“複合”索引將有助於兩者
WHERE status = ...
和
WHERE status = ... AND date < ...
並且
WHERE date < ... AND status = ...