MySQL EXPLAIN EXTENDED отфильтрованный столбец (очевидно, это не процент)

Я искал это, и все они заявляют какой-то процент, объясните это:

EXPLAIN EXTENDED SELECT * FROM PageAccess ORDER BY AccessId DESC LIMIT 20;
SELECT COUNT(*) FROM PageAccess;

Дарение:

id, select_type, table, type, possible_keys, key, key_len, ref, rows, filtered, Extra
1, 'SIMPLE', 'PageAccess', 'index', '', 'PRIMARY', '4', '', 20, 9295.00, ''

(Да, отфильтровано = 9295,00)

и

1830

Для count (*)

Да, мне нужны последние 20 строк, AccessId - это автоматически увеличиваемый первичный ключ.

Что означает 9295!?

8
задан Alec Teal 09 апр. '14 в 20:22
источник поделиться
2 ответов

Источник http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#explain_filtered

Отфильтрованный столбец указывает примерный процент строк таблицы который будет отфильтрован по условию таблицы. То есть строки показывают оцененное количество проверенных строк и строки × фильтруют /100 показывают количество строк, которые будут соединены с предыдущими таблицами. Эта колонка отображается, если вы используете EXPLAIN EXTENDED.

В отфильтрованном 100% означает, что все строки из этой таблицы фильтруются. Таким образом, получение более высокой ценности не вызывает беспокойства, поскольку это хороший знак, означает не нужно считывать столько данных из таблицы.

Вот как он рассчитан. Скажем, у меня есть таблица под названием users Позволяет выполнить некоторый анализ на ней.

mysql> select count(*) from users ;
+----------+
| count(*) |
+----------+
|    79309 |
+----------+

Вы можете видеть, что в таблице есть 79309 строк. Теперь давайте запустим объяснение

mysql> explain extended select * from users order by idusers desc limit 20 ;
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | filtered  | Extra |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+
|  1 | SIMPLE      | users | index | NULL          | PRIMARY | 4       | NULL |   20 | 396545.00 |       |
+----+-------------+-------+-------+---------------+---------+---------+------+------+-----------+-------+

Теперь интересно, почему filtered = 396545.00

Хорошо, расчет прост.

В таблице есть полные строки = 79309, скажем, ее tx.

Объяснение показывает, что строки = 20 говорят о его tx1.

Отфильтрованный вычисляется как

(tx / tx1)*100 = 396545.00

Итак, если это значение велико, значит, запрос хорош и не читает все из таблицы.

Таким образом, чтобы не путать, это не количество строк, в котором запрос будет выглядеть относительным вычислением% по количеству строк, доступным для количества выбранных строк.

Если значение 100 означает, что запрос ищет все доступные строки в таблице.

12
ответ дан Abhik Chakraborty 09 апр. '14 в 20:28
источник поделиться

Когда EXPLAIN используется с ключевым словом EXTENDED, выход включает в себя отфильтрованный столбец, который иначе не отображается. В этом столбце указан примерный процент строк таблицы, которые будут отфильтрованы по условию таблицы.

-4
ответ дан Michael Clayton 15 янв. '15 в 22:30
источник поделиться

Другие вопросы по меткам или Задайте вопрос