Hello, Dmitry!
You wrote on Fri, 23 Jun 2006 13:29:11 +0400:
DY> Да не в параметрах дело, а в факте. В параметрах будет, когда
DY> гистограммы появятся. И пока монопенисуально.
Да, не в параметрах, с ними я ошибся.
Потестировал маленько... Порезал всю базу, оставил только интересующие меня
таблицы и поля. Сделал бэкап/рестор на двойке в ODS 11.0. Выполнял запрос
select count(*)
from DOCS
where DOC_DATE between '1.5.6' and '31.5.6'
and FROM_ID = ?FROM_ID
and DOCUMENT_ID = 2 (0,4535 от всех вариантов) или = 1 (0,0122 от всех
вариантов)
Тестировал на FB 2.0 с выбором ручного плана
PLAN (DOCS INDEX (FK_DOCS_FROM, DOCS_IDX_DATE)) (вариант N1)
с автоматически выбираемым планом
PLAN (DOCS INDEX (FK_DOCS_FROM, FK_DOCS_DOCUMENT)) (вариант N2)
или с планом, использующим самый селективный индекс
PLAN (DOCS INDEX (FK_DOCS_FROM)) (вариант N3)
Для значений поля FROM_ID использовались два значения, которые более или
менее часто использовались (0,068 от всех и 0,0005). Результаты (F -
Fetches, IR - индексные чтения) для первой пары (0,068 и 0,4535):
Диапазон дат Вар 1 Вар 2
Вар 3
01.05.06 - 10.05.06 F:001435, IR:00589 F:136081,IR:68648
F:176436,IR:88097
01.05.06 - 31.05.06 F:005317, IR:02520 F:136081,IR:68648
F:176436,IR:88097
01.01.06 - 31.05.06 F:022713, IR:11171 F:136081,IR:68648
F:176436,IR:88097
31.05.05 - 31.05.06 F:055560, IR:27489 F:138081,IR:68648
F:176436,IR:88097
31.05.04 - 31.05.06 F:104864, IR:51967 F:138081,IR:68648
F:176436,IR:88097
Для второй пары (0,068 и 0,4535):
Диапазон дат Вар 1 Вар 2
Вар 3
01.05.06 - 10.05.06 F:0166,IR:008 F:1069,IR:460
F:1777,IR:821
01.05.06 - 31.05.06 F:0210,IR:020 F:1069,IR:460
F:1777,IR:821
01.01.06 - 31.05.06 F:0408,IR:072 F:1069,IR:460
F:1777,IR:821
31.05.05 - 31.05.06 F:0939,IR:232 F:1069,IR:460
F:1777,IR:821
31.05.04 - 31.05.06 F:2179,IR:678 F:1069,IR:460
F:1777,IR:821
Распределение документов (это таблица документов) по годам:
Год Количество
2000 711
2001 57829
2002 131875
2003 166658
2004 246208
2005 289936
2006 108271
2007 2
Что я вижу из этого теста - вариант использованием индекса по датам для
первой пары выигрывает по любому (для диапазона в месяц и меньше выигрывает
просто неприлично), для второй пары - сравнивается с вариантом 2 только
где-то в районе четверти объема (примерно полтора года по датам). Ну и ?
PS: Теперь я точно окончательно умолкаю. Естественно, всегда можно найти и
другие примеры, когда новое поведение оптимизатора будет выгодно. Но
диапазонные выборки по тем же данным весьма нередки. И выборки именно по
небольшой части (день, неделя, месяц. Больше - много реже). И индекс по
таким полям строят _специально_, чтобы ускорить выборки. Теперь же этот путь
просто закрыт. :(((
Ладно, будем просто знать.
--
With best regards, Yuri Grabar.
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---