Увеличиваем производительность PL/SQL

Источник: all-oracle

Рекомендовано для:
  • Oracle Database 8i
  • Oracle Database 9i R1
  • Oracle Database 9i R2
  • Oracle Database 10g R1
  • Oracle Database 10g R2
  • Oracle Database 11g R1
 

В этой статье дается несколько советов по увеличению производительности PL/SQL кода. Для тестов будем использовать таблицу EMP из схемы SCOTT.

Итак, приступим:

Пример 1

SELECT ENAME FROM EMP WHERE EMPNO // ' ' // ENAME='7369 SMITH';
Elapsed: 00:00:00.03
 
SELECT ENAME FROM EMP WHERE EMPNO=7369 AND ENAME='SMITH';
Elapsed: 00:00:00.01

Вывод: Первый запрос выполнил полное сканирование таблицы  в поисках соотвествия, второй  использовал индекс по полю EMPNO.

Пример 2

SELECT ENAME FROM EMP WHERE COMM=0;
Elapsed: 00:00:00.01
 
SELECT ENAME FROM EMP WHERE COMM IS NULL;
Elapsed: 00:00:00.03

Вывод: Сравнение индексированных столбцов с NULL требует больше времени.

Пример 3

SELECT DISTINCT JOB, ENAME, EMPNO FROM EMP WHERE EMPNO=7566;
Elapsed: 00:00:00.03
 
SELECT JOB, ENAME, EMPNO FROM EMP WHERE EMPNO=7566;
Elapsed: 00:00:00.01

Вывод: Предложение DISTINCT должно использоваться только когда оно действительно необходимо.

Пример 4

SELECT DISTINCT D.DEPNO, D.DNAME
FROM DEPT D, EMP E
WHERE D.DEPTNO=E.DEPTNO;
Elapsed: 00:00:00.04
 
SELECT D.DEPNO, D.DNAME
FROM DEPT D
WHERE EXISTS (SELECT E.DEPTNO
              FROM EMP E
              WHERE D.DEPTNO=E.DEPTNO);
Elapsed: 00:00:00.01

Вывод: Вложенные запросы отрабатывают быстрее.

Пример 5

SELECT ENAME FROM EMP WHERE NOT EMPNO=0;
Elapsed: 00:00:00.04
 
SELECT ENAME FROM EMP WHERE EMPNO>0;
Elapsed: 00:00:00.03

Вывод:Оператор NOT на индексированном столбце снижает производительность. Замените оператор NOT другими операторами, которые помогут улучшить производительность.

Пример 6

SELECT * FROM EMP;
Elapsed: 00:00:00.03
 
select * from EMP;
Elapsed: 00:00:00.04

Вывод: Пишите предложения SQL в одном регистре, так затрачивается меньше времени на разбор.

Надеюсь эти нехитрые рекоммендации помогут сделать ваш код, хоть чуть-чуть но быстрее.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=20758