Я хочу швидким способом підрахувати кількість рядків у моїй таблиці, яка містить кілька мільйонів рядків. Я знайшов пост " MySQL: найшвидший спосіб підрахунку кількості рядків " на стеку Overflow, який, схоже, вирішив мою проблему. Баюа дав цю відповідь:
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
колонці