Оптимизация логической таблицы |
При написании логических подцепок, фильтров, баундсов следует очень внимательно располагать их элементы, т.к. это самым непосредственным образом связано с быстродействием системы.
Если необходимо осуществить фильтр или подцепку, поле фильтруемой или подцепляемой таблицы должно располагаться справа от символа подцепки (==, <<, >>, <<=, >>=), а фильтрующее выражение (например, поле корневой таблицы или же константа) - слева.
Пример неэффективного фильтра:
(( table.date1 >> filter_1 and table.date1 << filter_2 ))
Данный фильтр работает неэффективно, поскольку ключевые поля находятся слева от символа подцепки (==, <<, >>, <<=, >>=). В результате будет производиться полный перебор table на клиентской машине вне зависимости от наличия индекса в базе данных.
Исправленный фильтр:
(( filter_d1 << table.date1 and filter_d2 >> table.date1 ))
В последнем варианте данные будут отсортированы с использованием индекса по полю table.date1 (если, конечно, он есть).
Даже при отсутствии в словаре индекса по этому полю, следует оставить данный вариант написания, добавив ключевое слово noindex - в большинестве случаев оптимизация будет происходить внутренними средствами SQL или драйвера на сервере:
(( filter_d1 << table.date1(noindex) and filter_d2 >> table.date1(noindex) ))