Hello, Dmitry!
You wrote  on Thu, 22 Jun 2006 16:52:29 +0400:

[Sorry, skipped]

 DY> Ладно, заменим слово "расчет" на "оценку" :-)

 DY> а) FB2 оценивает кол-во попаданий в BETWEEN как: <кол-во записей> *
 DY> <коэф>. б) вариант от критиков: <кол-во записей> * <селективность> /
 DY> <коэф>.
 DY> или другими словами:

 DY> а) в N раз меньше кол-ва записей в таблице
 DY> б) в N раз больше, чем вернет равенство по этому же столбцу

 DY> Чем второй вариант концептуально правильнее?

Хотя бы уже тем, что использует статистику по индексу. Вариант а) фактически 
не использует индекс вообще. О чем я и писал ранее - смысл в индексе 
пропадает. Лично я за вариант б). О весовых коэффициентах можно спорить или 
не спорить. Или еще лучше - вынести их в конфигурациооный файл, как и выбор 
варианта а) или б) для работы. Это очень сложно сделать? По-моему, был бы 
самый оптимальный вариант. Причем рассказать, что нужно поставить, чтобы 
получить вариант оптимизатора для FB 1.5 или для FB 2.0

 ??>> 454842 из общего количества 1003575, т.е. практически половина. Только
 ??>> при чем тут это? В сервере же нет гистограмм

 DY> Вот именно что нету. И оптимизатор верит статистике и считает этот
 DY> индекс хорошим. Как минимум лучше, чем по дате (с учетом BETWEEN). Т.е.
 DY> проблема на самом деле комплексная - сочетание более пессимистичной
 DY> политики оптимизатора и "перекошенного" поля DOCUMENT_ID.

 DY> Сравни время выполнения при DOCUMENT_ID = 1 (или что там более
 DY> уникально) с двумя планами:
 DY> - PLAN (D INDEX (FK_DOCS_FROM, DOCS_IDX_DATE))
 DY> - PLAN (D INDEX (FK_DOCS_FROM, FK_DOCUMENT_ID))

Чуть позже сделаю.

-- 
With best regards, Yuri Grabar.  E-mail: [EMAIL PROTECTED] 



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

Ответить