Delphi 3 и создание приложений баз данных

       

Частичное использование составного индекса


Если запросы часто используют для поиска одни и те же столбцы, следует построить по этим столбцам индекс (если это возможно), так, чтобы чаще используемые столбцы выступали в качестве ведущих полей индекса. Тогда при поиске может быть использована часть индексных полей.

Пример.

Пусть часто выполняются запросы

SELECT * FROM SOME TABLE WHERE A = : ParamA AND В = :ParamB

SELECT * FROM SOME TABLE

WHERE A = : ParamA AND В = :ParamB AND С = :ParamC

SELECT * FROM SOME TABLE

WHERE A = : ParamA AND В = :ParamB AND С = :ParamC AND D = :ParamD

SELECT * FROM SOMETABLE

ORDER BY А,В

Тогда, построив индекс по столбцам А, В, С, D, мы можем с большой долей уверенности утверждать, что данный индекс будет использован при оптимизации всех четырех запросов. В первом случае будут использовано подмножество индекса, т.е. значения А, В; во втором - значения А, В, С, в третьем - А, В, С, D (то есть все значения индекса); в четвертом - А, В.

Следует помнить, что при использовании в запросах не всех столбцов из индекса, можно использовать только непрерывную последовательность столбцов, что важно для указания порядка сортировки в предложении ORDER BY. Например, если индекс построен по столбцам А, В, С, D, этот индекс не может использоваться для выполнения запросов

SELECT * FROM SOMETABLE ORDER BY А,С

SELECT * FROM SOMETABLE ORDER BY B,D

Порядок следования условий по столбцам в предложении WHERE оператора SELECT не важен (если условия объединены с помощью AND). Например, для выполнения следующих запросов может использоваться один и тот же индекс:

SELECT * FROM SOMETABLE WHERE A = 100 AND В = 200

SELECT * FROM SOMETABLE WHERE В = 200 AND A = 100

Однако при указании уровней сортировки в предложении ORDER BY оператора SELECT порядок следования столбцов является существенным. Например, для выполнения следующих запросов не может использоваться один и тот же индекс:

SELECT * FROM SOMETABLE ORDER BY А, В, С

SELECT * FROM SOMETABLE ORDER BY А, С, В



Содержание раздела