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. --~--~---------~--~----~------------~-------~--~----~ -~----------~----~----~----~------~----~------~--~---

