Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
05.07.2018, 03:06
|
|||
---|---|---|---|
|
|||
explain и кол-во записей в результирующем множестве |
|||
#18+
Доброго дня, коллеги. Вопрос по оценочному количеству записей в результирующем множестве при выполнении команды explain: Есть следующие таблицы: - таблица договоров (CONTRACT) в ней ~6.2 млн записей. - таблица подразделений (TMP_DEPS_ID), она не временная, а постоянная, в ней ~3200 записей. explain по связке этих таблиц показывает 6067061 записей, т.е. примерное кол-во записей в табл CONTRACT: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Реальное кол-во записей возвращаемых запросом - 3298016 Код: sql 1. 2. 3. 4. 5.
При этом, если добавить дополнительное условие в where, то explain показывает правильное кол-во записей: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Перенос TMP_DEPS_ID в условие where результата не даёт: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Столбцы по которым выполняется связывание (CONTRACT.DEPARTMENT_ID и TMP_DEPS_ID.ID) проиндексированы. vacuum analyze выполнен. Это нормальное поведение, или есть какой-либо способ получить более близкое к реальности значение кол-ва строк в запросе в explain? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.07.2018, 09:24
|
|||
---|---|---|---|
explain и кол-во записей в результирующем множестве |
|||
#18+
sKot, это нормальное поведение, а чем вас не устраивает эта оценка (6М против 3М)? обычно такое небольшое расхождение к проблемным планам не приводит, гораздо хуже когда отличается хотя бы на порядок. немного поправить возможно получится (не факт), подняв stats target для contract.department_id, тем самым собирая больше статистики, но вот надо ли? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
05.07.2018, 10:25
|
|||
---|---|---|---|
|
|||
explain и кол-во записей в результирующем множестве |
|||
#18+
Alexius, Спасибо, буду дальше смотреть что можно придумать. Я хотел использовать как примерный count(*) для отображения в пользовательском интерфейсе. Обычный count(*) выполняется ~8 сек, правда, на более сложном запросе. Это я для примера взял простой запрос, т.к. оценки по count'у абсолютно одинаковые. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1995680]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
93ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
others: | 289ms |
total: | 454ms |
0 / 0 |