Как определить размер одной таблицы, вы уже знаете. Посмотрим теперь на эту задачу с другой стороны: выясним не абсолютный, а относительный размер таблиц. SQL-функция Count проверяет все строки таблицы методом Последовательного сканирования : по очереди обращается к блокам данных таблицы и считывает число строк в каждом блоке. Если таблица находится на диске, то этот метод — выгодная модель получения доступа к диску, быстро возвращающая результат. Некоторые думают, что такой подсчет является хорошим показателем производительности системы управления базами данных. В отдельных СУБД даже специально оптимизируют выполнение SQL-функции count, однако в Postgres этого нет. Среди разработчиков PostgreSQL уже не раз поднимался вопрос о добавлении этой возможности, но мало кто видит необходимость в такой оптимизации. Да, функция count часто используется в приложениях, но подсчет без дополнения where не столь уж полезен. Так что в настоящее время нет возможности оптимизировать подобный SQL-запрос. Причиной сканирования таблицы по частям является основное свойство PostgreSQL — MVCC, контроль совместимости версий . MVCC позволяет вести подсчет одновременно со вставкой, обновлением или удалением данных из таблицы. Это очень полезно, хотя и требует больших усилий от сообщества разработчиков СУБД PostgreSQL. MVCC позволяет добавлять информацию в каждую строку таблицы с указанием, когда было сделано это изменение. Если изменения были внесены после начала выполнения SQL-функции, то при подсчете они просто игнорируются. Таким образом, чтобы получить результат функции Count, Необходимо для каждой строки таблицы проводить «проверку видимости».Точнее говоря, результатом подсчета будет только значение в определенный момент времени. В зависимости от того, что происходит с таблицей, это значение может сильно или незначительно измениться в процессе подсчета. Таким образом, получив результат, следует иметь в виду: он означает только то, что Некоторое время назад в таблице было X строк.
Рубрика: Женский интерес