Оптимизация логической таблицы Назад В начало Вперед

При написании логических подцепок, фильтров, баундсов следует очень внимательно располагать их элементы, т.к. это самым непосредственным образом связано с быстродействием системы.

Если необходимо осуществить фильтр или подцепку, поле фильтруемой или подцепляемой таблицы должно располагаться справа от символа подцепки (==, <<, >>, <<=, >>=), а фильтрующее выражение (например, поле корневой таблицы или же константа) - слева.

Пример неэффективного фильтра:

((
	 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)
))