InnoDB, count() в больших базах данных.
Как известно, InnoDB не очень хорош при работе с ключами.
Даже при вызове count() по PRIMARY INDEX – будет сканироватся вся таблица. А при огромном количестве записей – ето очень долго.
Вот один выход из проблемы:
CREATE TABLE `count_index_table` ( `id` int(4) unsigned NOT NULL auto_increment, `name` char(100) NOT NULL, `size` bigint(20) unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; -- Ну очень большая таблица CREATE TABLE `datatable` ( `id` bigint(20) unsigned NOT NULL auto_increment, `datalong` varchar(255) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; CREATE TRIGGER `datatable_before_ins` AFTER INSERT ON `datatable` FOR EACH ROW BEGIN UPDATE count_index_table SET count_index_table.size = count_index_table.size +1 WHERE count_index_table.name = 'datatable'; END; CREATE TRIGGER `datatable_after_del` AFTER DELETE ON `count1i` FOR EACH ROW BEGIN UPDATE count_index_table SET count_index_table.size = count_index_table.size-1 WHERE count_index_table.name = 'datatable'; END;
Источник: http://sql.ru/forum/actualthread.aspx?tid=280049#2535574