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. 



--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить