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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL密钥索引不起作用,使用where搜索所有行相关的知识,希望对你有一定的参考价值。

基本上我创建了一个表:

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 ;

我喜欢20行,CAMPUS1只有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如何真正起作用?我阅读了文档,但我无法理解。

以上是关于MySQL密钥索引不起作用,使用where搜索所有行的主要内容,如果未能解决你的问题,请参考以下文章

mysql联合索引

mysql:联合索引及优化

mysql 优化策略(如何利用好索引)

具有索引合并 + orderby 的 Firebase 不起作用

联合索引

SQLite 动态 WHERE 子句不起作用