Hello, All!

Возвращаясь к пройденной теме...
Итак, файл Optimize.cpp со строки 1584:

// Adjust the compound selectivity using the reduce factor.
// It should be better than the previous segment but worse
// than a full match.
const double diffSelectivity = scratch[i]->selectivity - selectivity;
selectivity += (diffSelectivity * factor);
fb_assert(selectivity <= scratch[i]->selectivity);
scratch[i]->selectivity = selectivity;

scratch[i]->selectivity  - начальная селективность для оценки (равна 
MAX_SELECTIVITY, т.е. 1.0)
selectivity    - селективность текущего индекса
factor    - фактор уменьшения влияния селективности для between = 0.2

Вычисление результирующей селективности происходит немного станно...  При 
изменении исходной селективности индекса от 0 до 1 вычисленная 
результирующая селективность изменяется от 0.2 до 1.0. Не должна ли 
результирующая селективность вычисляться хотя бы:

scratch[i]->selectivity = selectivity + selectivity * factor;

? Так, как она вычисляется сейчас получается, что любой индекс фактически не 
будет использоваться... Нет ли здесь ошибки? Именно так и задумывалось?

-- 
With best regards, Yuri Grabar. 



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

Ответить