20.09.08 18:07COUNT(*) для InnoDB таблиц
При переходе от MyISAM к Innodb, стоит помнить, что Innodb крайне медлителен в COUNT(*) запросах.
Следовательно, если у вас есть запросы вида SELECT COUNT(*) FROM t1 они будут выполняться значительно быстрее для MyISAM таблиц так как достаточно вернуть сохраненное количество записей. InnoDB в данном случае вынужден будет выполнить полно-табличное/индексное сканирование, потому, что он не имеет подобного счетчика. И одним простым счетчиком в данном случае не обойтись, ведь каждая транзакция может видеть разное количество записей в таблице.
Запросы вида SELECT COUNT(*) FROM t1 WHERE id = 9 выполняются примерно одинаково для MyISAM и InnoDB таблиц, сканированием диапозона индексов.
В реальных условия запросы второго типа встречаются гораздо чаще, так что это не такая уж большая проблема как может показаться. Чаще всего количество записей необходимо для административных утилит, отображения статистики и тому подобное и это легко обойти.
Вывод: InnoDB медленней не для всех запросов вида COUNT(*), а только для случаев без условия WHERE.
Комментариев нет | Рубрики: MySQL