помню MSSQL такой запрос чуть ли не мгновенно считал (могу ошибаться, давно дело было)
Тем, что каждого активного snapshot-а (транзакции) ответ может быть свой — какие-то "агрегации" / "счётчики" хранить было бы очень неэффективно... да и зачем (подобные запросы на самом деле нужны крайне редко)?
Ну надо же сделать секскан всей таблицы и посчитать. Можете вынести каунтер и поддерживать самостоятельно.
И кстати, к вопросу о MS SQL (вот только попробовал на старой тестовой базе): SELECT COUNT(*) FROM не_очень_широкая_таблица; -- Результат: 12549009 elapsed time = 5932 ms. Что-то совсем не "мгновенно" (в плане полный parallel scan "узкого" индекса, вполне ожидаемо). ;)
Обсуждают сегодня