Hello, Константин!

Константин wrote:

>     Может я опять чегой-то недопонимаю но нафига всё таки тогда
>     "индексы\селективность\отношение уникальных значений\что-то ещё"
>     если их не использовать в выборе плана ?

забодал, чесслово. Селективность используется, разумеется.
Но по селективности невозможно понять ПЕРЕКОС в значениях.
Например, селективность X предполагает, что существует
N групп по 10000 значений. А на деле оказывается что ОДНО
значение записно в ПОЛОВИНЕ всех записей таблицы.
Тут именно об этом случае и говорят.
Кроме того, СЕЛЕКТИВНОСТЬ можно использовать например если
у тебя ДВА BETWEEN, или СРАВНЕНИЯ на >, < =. То есть,
какой ИЗ ДВУХ индексов лучше. Если же идет поиск на >,
как тебе вообще ПОМОЖЕТ СЕЛЕКТИВНОСТЬ?

>     И откуда вобще появилась идея фиксированных "констант 0.5; 0.2" ?

ВОТ ДЛЯ ЭТОГО, то есть для определения разницы между >, <, = и between
и введены константы. Ты можешь залудить поиск на > как по БОЛЬШЕЙ части
индекса, так и ПО МЕНЬШЕЙ, но все равно по селективности эту большесть-меньшесть
определить НЕЛЬЗЯ. Поэтому на основе РЕАЛЬНЫХ ситуаций выбран коэффициент
0.5. То же самое в отношении BETWEEN - как правило, в среднем, between
выбирает где-то четверть записей, хотя ты можешь выбрать и ВСЕ.

И помочь более качественно оптимизировать запрос дальше (кроме селективности
и коэффициентов), могут ТОЛЬКО ГИСТОГРАММЫ. То есть, информация о
распределении конкретных значений. И с гистограммой только сервер бы
понял, что по FIELD = 1 выбирается ПОЛОВИНА ключей, а не среднее
число равное обратному от селективности (утрирую). И что это равенство
ХУЖЕ, чем BETWEEN по конкретным значениям.

>     Я по скудности своего воображения уже предложил вариант, не могу
>     сказать что он идеален - но всё же лучьше константы ИМХО ...

прежде чем воображать, надо все-таки понимать методы доступа,
которыми оперирует сервер в тех или иных случаях.

-- 
Dmitri Kuzmenko, www.ibase.ru, (495) 953-13-34


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

Ответить