谁能告诉我为什么 mysql 不使用“playerLead_status_INDEX”索引?
CREATE TABLE `bcs_player_lead`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(100) DEFAULT NULL,
`last_name` varchar(100) DEFAULT NULL,
`email_id` varchar(100) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
`state` varchar(100) DEFAULT NULL,
`country` varchar(100) DEFAULT NULL,
`created` datetime DEFAULT NULL,
`status` int(11) DEFAULT NULL COMMENT '1-New,2-invitation send',
PRIMARY KEY (`id`),
KEY `playerLead_status_INDEX` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=510 DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
EXPLAIN SELECT email_id,id,NULL,first_name,last_name,NULL,state,city,NULL,(2) as type FROM bcs_player_lead WHERE status='1'
id|select_type|table |type|possible_keys |key |key_len |ref |rows |Extra
1 |SIMPLE |bcs_player_lead |ALL |playerLead_status_INDEX|{null}|{null}|{null}| 第458话
bcs_player_lead 有两个键 -
提前致谢!
我不是 DBA 但 AFAIK,有时即使有索引也不使用索引:当表统计信息未更新(或)时,如@Leo 所说,要检索的行数可能更少(因为在您的情况下只有 458 行要检索)。
您可以使用FORCE INDEX (index_name). 尝试一次并检查EXPLAIN PLAN
SELECT email_id,id,NULL,first_name,last_name,NULL,state,city,NULL,(2) as type
FROM bcs_player_lead
FORCE INDEX (playerLead_status_INDEX)
WHERE status='1'
Run Code Online (Sandbox Code Playgroud)
一旦MySQL 不使用带有 WHERE IN 子句的索引,您可能想查看这篇文章?