Индекс ключа MySQL не работает, ищите все строки, используя где - PullRequest
0 голосов
/ 04 сентября 2018

Итак, в основном я создал таблицу:

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 строк только с 12 в CAMPUS1

Но когда я использую запрос это: 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 голосов
/ 04 сентября 2018

MySQL пытается быть умным (с переменным успехом) при решении, какой индекс использовать для запроса.

В некоторых случаях быстрее выполнить запрос всей таблицы вместо использования индекса. Например: если в вашей таблице 500 записей для CAMPUS1 и 100 записей для CAMPUS2, при поиске campus='CAMPUS1'.

будет быстрее выполнить полное (600 записей) сканирование.

Когда у вас есть только 20 строк, вы сталкиваетесь с крайними случаями алгоритма. Попробуйте добавить еще несколько строк и посмотрите, что получится.

Кроме того, кажется, что этот индекс будет иметь очень низкую мощность (четное разделение только между 2 значениями). Это, вероятно, будет не очень полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...