2010-11-10 4 views
4
EXPLAIN EXTENDED SELECT `board` . * 
FROM `board` 
WHERE `board`.`category_id` = '5' 
AND `board`.`board_id` = '0' 
AND `board`.`display` = '1' 
ORDER BY `board`.`order` ASC 

Выход выше запросаПочему этот запрос использует где вместо индекса?

id select_type table type possible_keys key key_len ref rows filtered Extra 
1 SIMPLE board ref category_id_2 category_id_2 9 const,const,const 4 100.00 Using where 

Я немного смущен этим, потому что у меня есть индекс, который содержит столбцы, которые я использую в том же порядке, они используются в запрос ...:

category_id_2 BTREE No No 
category_id 33 A  
    board_id 33 A 
    display 33 A 
    order 66 A 

ответ

4

Выход EXPLAIN иногда может ввести в заблуждение.

Например, filesort не имеет ничего общего с файлами, using where не означает, что вы используете пункт WHERE и using index может отображаться на столах без единого индекса, определенного.

Using where просто означает, что на столе есть какое-то ограничивающее предложение (WHERE или ON), и не вся запись будет возвращена. Обратите внимание: LIMIT не считается ограничивающим предложением (хотя это может быть).

Using index означает, что вся информация возвращается из индекса без поиска записей в таблице. Это возможно только в том случае, если все поля, требуемые по запросу, покрываются индексом.

Поскольку вы выбираете *, это невозможно. Поля, отличные от category_id, board_id, display и order не подпадают под индекс и должны быть просмотрены.

+0

Что это значит, когда 'Using where; Используется индекс? возможно, вы можете ответить на этот http://stackoverflow.com/questions/41620312/mysql-not-picking-correct-row-count-from-index –

0

Фактически используется индекс category_id_2.

+0

Но он говорит в конце 'Использование где' .... возможно, я неправильно понял, что это цель. – Webnet

0

Он использует индекс category_id_2 правильно, как показано полем key поля EXPLAIN.

Using where просто означает, что вы выбираете только несколько строк, используя в WHERE заявление, так что вы не получите всю таблицу обратно;)

Смежные вопросы