MySQL键索引不起作用,使用where搜索所有行

时间:2018-09-04 05:31:14

标签: mysql key

所以基本上我创建了一个表:

CREATE TABLE IF NOT EXISTS `student` (
    `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
    `campus` enum('CAMPUS1', 'CAMPUS2') NOT NULL,
    `fullname` char(32) NOT NULL,
    `gender` enum('MALE', 'FEMALE') NOT NULL,
    `birthday` char(16) NOT NULL,
    `phone` char(32) NOT NULL,
    `emergency` char(32) NOT NULL,
    `address` char(128) NOT NULL,

    PRIMARY KEY (`idx`),
    KEY `key_student` (`campus`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

我在CAMPUS1中有20行,只有12行

但是当我使用查询时:SELECT * FROM student WHERE campus='CAMPUS1'; EXPLAIN是这样的:

id  select_type   table   type  possible_keys  key  key_len  ref  rows  Extra
1   SIMPLE        student ALL   key_student    NULL NULL     NULL 20    Using where

我对这件事是陌生的,KEY到底如何工作?我读了文档,但我听不懂。

1 个答案:

答案 0 :(得分:0)

在决定使用哪个索引进行查询时,MySQL试图变得聪明(取得不同的成功)。

在某些情况下,查询整个表比使用索引更快。例如:如果您的表中有CAMPUS1的500条记录和CAMPUS2的100条记录,则在查找campus='CAMPUS1'时进行完整(600条记录)扫描会更快。

只有20行时,您会遇到算法的边缘情况。尝试添加更多行,看看会发生什么。

此外,该索引似乎具有非常低的cardinality(仅在2个值之间平分)。这可能不是很有用。