Содержание
- 2. План запроса Практически любую задачу по получению каких-либо результатов из базы данных можно решить несколькими способами,
- 3. Как это выглядит в ORACLE APEX?
- 4. Некоторые термины в плане запроса TABLE ACCESS FULL — сервер просмотрит все записи таблицы. TABLE ACCESS
- 5. Некоторые термины в плане запроса SORT MERGE JOIN — используется для соединения записей нескольких независимых источников.
- 6. Анализ плана запроса При анализе плана запроса необходимо примерно представлять объемы записей в таблицах и наличие
- 7. Full Table Scan (Table Access Full). Может показаться, что доступ к данным таблицы быстрее осуществлять через
- 8. Nested Loops Такое соединение может использоваться оптимизатором, когда небольшой основной набор записей (стоит первым в плане
- 9. Hash Joins Используется при соединении больших наборов данных. Оптимизатор использует наименьший из наборов данных для построения
- 10. Sort Merge Join Данное соединение может быть применено для независимых наборов данных. Обычно Oracle выбирает такую
- 11. Cartesian Joins Это соединение используется, когда одна и более таблиц не имеют никаких условий соединения с
- 12. Определение Подсказка (hint) – это указание оптимизатору на необходимость исполнения определенной формы доступа к данным на
- 13. Синтаксис {DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */... or {DELETE|INSERT|SELECT|UPDATE} --+ hint [text] [hint[text]]...
- 14. Примеры ====================================================== SELECT /*+ ALL_ROWS */ empno, ename, sal, job FROM emp WHERE ename = ‘CAT’;
- 15. Что будет, если подсказка написана неправильно… ORACLE игнорирует подсказки, которые не следуют за ключевыми словами DELETE,
- 16. Группы подсказок Подсказки можно разделить на следующие группы: подсказки задающие цели оптимизации подсказки задающие методы доступа
- 17. Подсказки, задающие цели оптимизации ALL_ROWS FIRST_ROWS(n) CHOOSE RULE
- 18. Пример (ALL_ROWS) SELECT /*+ ALL_ROWS */ employee_id, last_name, salary, job_id FROM employees
- 19. Пример (FIRST_ROWS(n)) SELECT /*+ FIRST_ROWS(10) */ empno, ename, sal, job FROM emp
- 20. Пример (CHOOSE) SELECT /*+ CHOOSE */ empno, ename, sal, job FROM emp WHERE empno = 7566;
- 21. Пример (RULE) SELECT --+ RULE empno, ename, sal, job FROM emp WHERE empno = 7566;
- 22. Подсказки, задающие методы доступа FULL ROWID INDEX INDEX_ASC INDEX_DESC INDEX_FFS NO_INDEX INDEX_COMBINE INDEX_JOIN ….
- 23. Пример (FULL) SELECT /*+ FULL(e) */ employee_id, last_name FROM hr.employees e WHERE last_name LIKE ‘%A’;
- 24. Пример (ROWID) SELECT /*+ROWID(emp)*/ * FROM emp WHERE rowid > 'AAAAtkAABAAAFNTAAA' AND empno = 155;
- 25. Пример (INDEX) SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id FROM employees WHERE department_id > 50;
- 26. Пример (INDEX_ASC)
- 27. Пример (INDEX_ASC)
- 28. Пример (INDEX_ASC)
- 29. Пример (INDEX_DESC) SELECT /*+ INDEX_DESC(emp pk_emp) */ empno , ename FROM emp SELECT /*+ INDEX_DESC(emp pk_emp)
- 30. Пример (INDEX_FFS) SELECT /*+INDEX_FFS(emp emp_empno)*/ empno FROM emp WHERE empno > 200;
- 31. Пример (NO_INDEX) SELECT /*+NO_INDEX(emp emp_empno)*/ empno FROM emp WHERE empno > 200;
- 32. Пример (INDEX_COMBINE) SELECT /*+ INDEX_COMBINE(e emp_manager_ix emp_department_ix) */ * FROM employees e WHERE manager_id = 108
- 33. Пример (INDEX_JOIN) SELECT /*+ INDEX_JOIN(e emp_manager_ix emp_department_ix) */ department_id FROM employees e WHERE manager_id Оптимизатору рекомендовано
- 34. Подсказки для операции соединения (JOIN) USE_NL - использовать вложенные циклы для соединения указанных в подсказке таблиц;
- 35. Пример (USE_NL) SELECT /*+ USE_NL(customers) to get first row faster */ accounts.balance, customers.last_name, customers.first_name FROM accounts,
- 36. Пример (USE_MERGE) SELECT /*+USE_MERGE(emp dept)*/ * FROM emp, dept WHERE emp.deptno = dept.deptno;
- 37. Другие подсказки MATERIALIZE – материализовать промежуточную таблицу PARALLEL – распараллелить выполнение запроса И др.
- 38. Сбор статистики, полезной для оптимизатора Статистика по таблицам Количество записей Количество блоков Средняя длина записи Статистика
- 39. Процедуры для сбора статистики (пакет DBMS_STATS) GATHER_INDEX_STATS GATHER_TABLE_STATS GATHER_SCHEMA_STATS GATHER_DATABASE_STATS GATHER_SYSTEM_STATS Примечание: эти процедуры не запускаются
- 40. Представления словаря для просмотра статистики DBA_TABLES DBA_TAB_COL_STATISTICS DBA_INDEXES
- 41. Пример SELECT TABLE_NAME, NUM_ROWS, BLOCKS, AVG_ROW_LEN, TO_CHAR(LAST_ANALYZED, 'MM/DD/YYYY HH24:MI:SS') FROM DBA_TABLES WHERE TABLE_NAME IN ('SO_LINES_ALL','SO_HEADERS_ALL','SO_LAST_ALL');
- 43. Скачать презентацию