mysql> SELECT COUNT (*) vs SHOW TABLE STATUS для количества строк - PullRequest
0 голосов
/ 20 июня 2020

У нас есть таблица в нашей базе данных, которая содержит десятки миллионов записей (10.1.21-MariaDB; движок таблиц InnoDB; Windows OS). Мы можем мгновенно получить количество строк в таблице с помощью команды SHOW TABLE STATUS LIKE 'my_table_name'. Однако, SELECT COUNT(*) FROM my_table_name занимает несколько минут.


Q) Почему SHOW TABLE STATUS LIKE 'my_table_name' намного быстрее, чем SELECT COUNT(*) FROM my_table_name?

1 Ответ

4 голосов
/ 20 июня 2020

Потому что один - это запрос, который подсчитывает все строки, а другой - команда, которая извлекает статистику, поддерживаемую механизмом БД о таблице. Нет никакой твердой гарантии, что таблица statisti c будет актуальной, поэтому единственный способ получить точный подсчет - это подсчитать строки, но возможно, вам не нужно, чтобы это было абсолютно точно все время. Таким образом, вы можете выбрать любой из них, в зависимости от вашего стремления к точности и скорости et c.

См. Здесь этот снимок экрана из https://pingcap.com/docs/stable/sql-statements/sql-statement-show-table-status/

enter image description here

Вы можете увидеть, что в примере вставляется 5 строк, но статистика таблицы устарела, и в таблице все еще отображается 0 строк. Выполнение ANALYZE TABLE (вероятно) займет больше времени, чем подсчет строк, но после этого статистика будет обновляться (по крайней мере, на некоторое время).

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