Учитывая следующее -MySQL индексы когда несколько возможны
drop table if exists learning_indexes;
create table learning_indexes (
id INT NOT NULL,
col1 CHAR(30),
col2 CHAR(30),
col3 CHAR(30),
PRIMARY KEY (id),
index idx_col1 (col1),
index idx_col1_col2 (col1,col2)
);
explain
select
col1,col2
from
learning_indexes
where
col1 = 'FOO'
and col2 = 'BAR'
Почему MySQL выбрать idx_col1 над idx_col1_col2?
+----+-------------+------------------+------+------------------------+----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------------+------+------------------------+----------+---------+-------+------+-------------+
| 1 | SIMPLE | learning_indexes | ref | idx_col1,idx_col1_col2 | idx_col1 | 91 | const | 1 | Using where |
+----+-------------+------------------+------+------------------------+----------+---------+-------+------+-------------+
Это моя версия информация -
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| innodb_version | 1.1.8 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.29 |
| version_comment | Source distribution |
| version_compile_machine | i386 |
| version_compile_os | osx10.7 |
+-------------------------+---------------------+
спасибо. Я думал, что «использование индекса» означает, что он извлекает значения выбора из индекса? Попробуйте два варианта, закомментируйте idx_col1. Также переключите «col1, col2» на *. Можете ли вы поделиться, где вы получили информацию из 100 строк? –
MySQL Doc говорит, что если столбец «Дополнительно», где используется индекс И с использованием индекса, это означает, что индекс используется для выполнения поиска ключевых значений (http://dev.mysql.com/doc/refman/5.5/en/explain-output .html # объяснить-Join-типов). – Marcellus
Для 100 (или более) строк данных я сделал id как первичный ключ auto_increment. Затем я добавил 3 строки со случайными значениями. Чтобы умножить, я сделал что-то вроде INSERT INTO 'learning_indexes' (col1, col2, col3) SELECT CONCAT (col2, 'q'), CONCAT (col1, 'z'), CONCAT (col3, 'c') FROM' learning_indexes' ; неоднократно. Это удваивает количество строк при каждом выполнении и как-то перемешивает и изменяет вновь вставленные значения строк. – Marcellus