Какова сложность этого запроса MySQL
SELECT COUNT(*) FROM MyTable;
Сохраняется ли где-то число записей в таблице, где-то хранится и обновляется каждый раз, когда строка вставляется или удаляется?Если это так, то сложность должна быть O (1).
Это зависит от механизма хранения.
SELECT COUNT(*) FROM yourtable
Из руководства :
InnoDB не ведется внутренний подсчет строк вТаблица.(На практике это было бы несколько сложно из-за множественного управления версиями.) Чтобы обработать оператор SELECT COUNT(*) FROM t, InnoDB должен сканировать индекс таблицы, что занимает некоторое время, если индекс не полностью находится в пуле буферов.Если ваша таблица не меняется часто, использование кэша запросов MySQL является хорошим решением.Чтобы получить быстрый счет, вы должны использовать созданную вами таблицу счетчиков и позволить своему приложению обновлять ее в соответствии со вставками и удалять.SHOW TABLE STATUS также можно использовать, если достаточно приблизительного количества строк.См. Раздел 13.2.13.1, «InnoDB Советы по настройке производительности ».
InnoDB
SELECT COUNT(*) FROM t
SHOW TABLE STATUS
AFAIK в MyISAM-счетчиках строк кэшируется, в InnoDB нет, и при каждом count-all он считает все строки.
Я не уверен, сохранено ли это значение или нет, но это совсем не важно для вашего запроса.Используя MySQL с вашим запросом, он будет считать все возвращенные строки в тот момент, когда вы его выполняете.