Я нашел документы, объясняющие, что oracle использует их для настройки производительности и т. Д., Но не совсем понял, что на самом деле это делает. Может кто-нибудь объяснить это мне простым словом с очень простым примером или чем-то еще?Почему они используют DBMS_STATS.GATHER_TABLE_STATS?
ответ
Большинство баз данных предприятий, включая Oracle, используют оптимизатор затрат для определения соответствующего плана запроса для данного оператора SQL. Это означает, что оптимизатор использует информацию о данных, чтобы определить, как выполнять запрос, а не полагаться на правила (это то, что сделал более старый оптимизатор на основе правил).
Например, представьте таблицу для простого отслеживания ошибок приложения
CREATE TABLE issues (
issue_id number primary key,
issue_text clob,
issue_status varchar2(10)
);
CREATE INDEX idx_issue_status
ON issues(issue_status);
Если я крупная компания, я мог бы иметь 1 миллион строк в этой таблице. Из них 100 имеют issue_status
ACTIVE, 10 000 имеют issue_status
QUEUED, а 989 900 имеют статус COMPLETE. Если я хочу запустить запрос к таблице, чтобы найти свои активные проблемы
SELECT *
FROM issues
WHERE issue_status = 'ACTIVE'
У оптимизатора есть выбор. Он может либо использовать индекс на issue_status
, а затем выполнять однострочный поиск в таблице для каждой строки в индексе, который соответствует, или он может выполнять сканирование таблицы в таблице issues
. Какой план более эффективен, будет зависеть от данных, которые находятся в таблице. Если Oracle ожидает, что запрос вернет небольшую часть данных в таблицу, использование индекса будет более эффективным. Если Oracle ожидает, что запрос вернет значительную часть данных в таблице, сканирование таблицы будет более эффективным.
DBMS_STATS.GATHER_TABLE_STATS
- это то, что собирает статистику, которая позволяет Oracle делать это определение. Он сообщает Oracle, что в таблице примерно 1 миллион строк, что есть 3 различных значения для столбца issue_status
и что данные распределены неравномерно. Поэтому Oracle знает, как использовать индекс для запроса, чтобы найти все активные проблемы. Но он также знает, что, когда вы поворачиваете вокруг и попытаться взглянуть на все закрытые вопросы,
SELECT *
FROM issues
WHERE issue_status = 'CLOSED'
, что это будет более эффективно делать сканирование таблицы.
Сбор статистики позволяет изменять планы запросов с течением времени по мере изменения объемов данных и распределений данных. Когда вы впервые установите трекер проблемы, у вас будет очень мало COMPLETED проблем и более проблем ACTIVE и QUEUED. Со временем число ЗАПОЛНЕННЫХ проблем растет намного быстрее. По мере того как вы получаете больше строк в таблице и относительная доля этих строк, находящихся в разных статусах, меняются, планы запросов будут меняться так, что в идеальном мире вы всегда получите максимально эффективный план.
- 1. Почему они используют интерфейс в этом руководстве?
- 2. Какие технологии они используют?
- 3. Какую роль они используют?
- 4. GoodBarber.com - Какой контроль они используют?
- 5. В DDD почему они часто используют методы вместо свойств?
- 6. Weird SQL code: Почему они используют подзапрос вместо соединения?
- 7. Почему дизайнеры используют sIFR, если они могут использовать @ font-face?
- 8. Что такое саги и почему они используют архитектуры, управляемые событиями?
- 9. Почему они используют здесь префикс jQuery перед именем функции?
- 10. Почему они используют этот 'public User getUserById (int userId)'?
- 11. понимание FPS и методов, которые они используют
- 12. Почему букмарклеты используют iframe?
- 13. Dbms_Stats.Gather_Table_Stats после обмена разделами в процедуре Oracle?
- 14. Google+ интерактивное сообщение - какой механизм они используют?
- 15. Facebook любопытство, какой javascript рамки они используют?
- 16. Что они используют для ленивой загрузки?
- 17. SID и HSID cookies: что они используют?
- 18. анимации UIView, используют ли они «Core Animation»
- 19. Какие средства управления они используют и как?
- 20. Почему языки сценариев используют интерпретатор?
- 21. Почему люди используют textmate?
- 22. Почему люди используют JSP?
- 23. Почему программисты используют void *
- 24. Почему люди используют ProjectData
- 25. Почему все используют latin1?
- 26. Почему браузеры используют префиксы?
- 27. Почему ссылки используют больше памяти?
- 28. Почему указатели используют -> вместо.?
- 29. PHP: объект A расширяет объект B, они совместно используют конструктор?
- 30. Почему `запросы` используют инструкцию` with`?
Большое спасибо Джастину, это имеет смысл. – Manth
Посмотрел много документов о GATHER_TABLE_STATS, это так хорошо объяснено. Спасибо, что поделились мыслями! –