Я хочу быстрый способ подсчитать количество строк в моей таблице, которая имеет несколько миллионов строк. Я обнаружил сообщение « MySQL: самый быстрый способ подсчета количества строк » в переполнении стека, которое выглядело так, как будто это решило бы мою проблему. Bayuah предоставил этот ответ:
SELECT
table_rows "Rows Count"
FROM
information_schema.tables
WHERE
table_name="Table_Name"
AND
table_schema="Database_Name";
Что мне понравилось, потому что это выглядит как поиск вместо сканирования, так что это должно быть быстро, но я решил проверить его
SELECT COUNT(*) FROM table
чтобы увидеть, какая разница в производительности была.
К сожалению, я получаю разные ответы, как показано ниже:
Вопрос
Почему ответы отличаются примерно на 2 миллиона строк? Я предполагаю, что запрос, который выполняет полное сканирование таблицы, является более точным числом, но есть ли способ, которым я могу получить правильное число, не выполняя этот медленный запрос?
Я побежал ANALYZE TABLE data_302
, что завершилось за 0,05 секунды. Когда я снова запустил запрос, теперь я получил гораздо более близкий результат из 34384599 строк, но он по-прежнему не такой, как select count(*)
у 34906061 строк. Анализирует ли таблица сразу и обрабатывает ли он в фоновом режиме? Я чувствую, что стоит упомянуть, что это тестовая база данных, и в настоящее время она не пишется.
Никого не волнует, если это просто случай, когда кто-то говорит, насколько велика таблица, но я хотел передать количество строк в фрагмент кода, который будет использовать эту цифру для создания асинхронных запросов одинакового размера для запросов к базе данных. параллельно, аналогично методу, показанному в статье «Повышение производительности медленных запросов при параллельном выполнении запросов » Александром Рубиным. На самом деле, я просто получу самый высокий идентификатор SELECT id from table_name order by id DESC limit 1
и надеюсь, что мои таблицы не будут слишком фрагментированными.
NUM_ROWS
столбце