Vlad Horsun wrote:
> Теперь смотрим на больше или меньше. Если ключи распределены равномерно
> и мы не знаем, что мы будем искать (или у нас нет гистограмм), то в среднем мы
> будем перебирать ровно половину всех ключей. Отсюда оценка 0.5. Она,
> естественно,
> никак не может зависеть от селективности. Если искомое значение известно
> заранее
> и у нас есть гистограммы, то мы можем знать более точную оценку.
Вот тут, мне каатся, теория малость возобладала над практикой.
Ключи-то, положим, в большинстве диапазонных выборок предметной области
АСУП распределены более-менее равномерно, ибо в 95% это действительно
даты неперерывного потока с более-менее постоянной или слаботрендовой
интенсивности. Остальные 5% - обычно атрибуты номенклатора
количественного типа (удельный вес, ширина, длина) и статусы некоторых
объектов, неупорядоченные в справочнике по ID (и не могут быть
упорядочены под каждый запрос, поэтому тут чаще OR чем Between). От
первого толк редко бывает большой (разве что гигантский номенклатор,
линейно упорядоченный по этим атрибутам), от второго чаще всего один
вред даже при выборке на равенство. Тут теория попадает в яблочко. А вот
с датами, составляющими 95% выборок... Половина и четверть в случае
between на практике не выбирается просто никогда. Либо доли и единицы
процентов (неделя, месяц, квартал) либо десятки (год), либо фсё. Теория
не учитывает не характер распределения данных, а характер выборок
предметной области, которые не "в общем случае" и не "в среднем", что,
пожалуй, характерно для тех же физических исследований.
Вот. Тоже потеоретизировал. Только вот какая фигня получается :) Не
воспроизводится у меня вся эта канитель на 12654 билде RC2 :-D
SC_LST_DATEREG INDEX ON SC_LST(DATEREG)
RDB$FOREIGN862 INDEX ON SC_LST(SCTO)
select count(*) from sc_lst where scto=1 and datereg between
'01.01.2005' and '01.02.2005'
PLAN (SC_LST INDEX (RDB$FOREIGN862, SC_LST_DATEREG))
:-D
--
Regards. Ded.
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---