mysql> CREATE TABLE `t` (
`id` int(11) NOT NULL,
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `a` (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB
есть таблица с именем t и два индекса с именами a и b. Вставить в t 100000 строк данных
mysql> create procedure idata()
begin
declare i int;
set i=1;
while(i<=100000)do
insert into t values(i, i, i);
set i=i+1;
end while;
end;
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ;
mysql> call idata();
Я провожу несколько экспериментов, некоторые из них выглядят следующим образом
![there are some experiments](https://i.stack.imgur.com/EZLxj.png)
Теперь я хочу знать;
(1) почему explain select * from t where a >= 90000;
лишнее Using index condition
? у него есть индексный ключ, но у него нет индексного фильтра и фильтра таблицы, так почему это Using index condition
?
(2) почему explain select * from t where a = 90000;
extra это NULL
? необходимо иметь доступ к таблице, если в первом случае Using index condition
, почему во втором не может быть Using index condition
?
(3) почему explain select a from t where a >= 90000;
extra - Using where; Using index
? Я знаю, что он использует индекс обложки, поэтому у extra Using index
; но почему extra имеет Using where
? значит серверу нужно фильтровать данные? но механизм хранения уже вернул правильный, зачем серверу фильтровать?