Двадцать пять заповедей SQL
Страница 10. Раздел WHERE является критическим


 

9. Раздел WHERE является критическим.

Для следующих примеров раздела WHERE индексный путь доступа не будет использоваться, даже если индекс существует (COL1 и COL2 - столбцы одной таблицы, и создан индекс на COL1):

  • COL1 > COL2
  • COL1 < COL2
  • COL1 >= COL2
  • COL1 <= COL2
  • COL1 IS NULL
  • COL1 IS NOT NULL (В индексе не сохраняются идентификаторы строк - ROWID - для столбцов, содержащих неопределенные значения. Поэтому для выполнения запросов строк с неопределенными значениями индекс не может быть использован.)
  • COL1 NOT IN (value1, value2)
  • COL1 != expression
  • COL1 LIKE '%patern' (В этом случае начальная составляющая ключа индекса не указывается и поэтому индекс не может быть использован. С другой стороны, для COL1 LIKE 'patern%' и COL1 LIKE 'patern%patern%' индекс может использоваться в режиме сканирования в диапазоне значений ключа.)
  • NOT EXISTS subquery
  • expression1 = expression2 (Любые выражения, функции и вычисления, включающие индексированные столбцы, препятствуют использованию индекса. Например, в следующем примере наличие функции UPPER не дает возможность использовать сканирование по индексу, и будет применен полный просмотр таблицы:
SELECT DEPT_NAME
FROM DEPARTMENT
WHERE UPPER(DEPT_NAME) like 'SALES%');

 
« Предыдущая статья   Следующая статья »