Mysql 索引不起作用

Abh*_*bhi 3 mysql indexing

谁能告诉我为什么 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 有两个键 -

  1. 主要在 ID
  2. playerLead_status_INDEX 关于状态

提前致谢!

Rah*_*hul 5

我不是 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 子句的索引,您可能想查看这篇文章