![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Индексация поля [D6, IB6.x]
Жук © (2005-07-05 13:34:00)Имеет ли смысл в большой(по количеству записей)таблице делать индекс по полю, которое может принимать всего 6 значений? Есть ряд запросов, где в условиях встречается это поля. В итоге я в плане получаю БОЛЬШАЯТАБЛИЦА NATURAL.
Petr V. Abramov (2005-07-06 17:22:00) [1]> Игорь Шевченко © (06.07.05 17:07) [36]
> Я пытаюсь доказать, что битмап-индекс может быть полезен даже
> по одному полю. Ты с этим споришь ?
- Является ли ваучер ценной бумагой?
- В жизни каждого человека хоть раз возникает такой момент, когда любая бумага является ценной!
Игорь Шевченко (2005-07-06 17:07:00) [2]Petr V. Abramov © (06.07.05 17:04) [35]
> Может, он немного не про то пишет, что ты пытаешься доказать
Я пытаюсь доказать, что битмап-индекс может быть полезен даже по одному полю. Ты с этим споришь ?
Petr V. Abramov (2005-07-06 17:04:00) [3]Может, он немного не про то пишет, что ты пытаешься доказать? :)
"Оно, конечно, Александр Македонский герой, но зачем же стулья ломать?" :)
Хорошо, давай какую-нить базу и init-файл от нее, я тебе сделаю хоть битмап быстрее, хоть fts, во столько раз, сколько бутылок пива поставишь :)
Игорь Шевченко (2005-07-06 16:56:00) [4]Petr V. Abramov © (06.07.05 16:39) [33]
"Как физик доказывает, что все нечетные числа простые? Возьмем любое нечетное число. Единицу можно считать простым числом, 3, 5, 7 – простые. Досадно, что 9 – не простое число. Однако 11 и 13 – снова простые. Вернемся к числу 9, говорит физик. Я заключаю, что оно является ошибкой эксперимента."
А эта...Том Кайт кстати весьма подробно пишет, для чего и как нужны эти индексы...
Petr V. Abramov (2005-07-06 16:39:00) [5]По результатам эксперимента на выборке одной пятой с кривым расперделением по даже локальному партиционированному битмапу разницы просто нет: +- 2%
Соотношение 6зн/4млн записей, партиционированная таблица (ессно, по другому полю).
Игорь Шевченко (2005-07-06 15:29:00) [6]Petr V. Abramov © (06.07.05 15:25) [31]
> Манипуляции с индексом + выборка сравнимы с последовательным
> чтением 3/4 таблицы, да еще в обход кэша
Во всех случаях ? :) В данном вопросе индекс выберет четверть содержимого таблицы.
Petr V. Abramov (2005-07-06 15:25:00) [7]> Игорь Шевченко © (06.07.05 15:18) [30]
> В этом случае индекс тебе выберет все нужные записи всяко
> быстрее, чем полный просмотр.
Или медленнее :) Манипуляции с индексом + выборка сравнимы с последовательным чтением 3/4 таблицы, да еще в обход кэша.
Игорь Шевченко (2005-07-06 15:18:00) [8]Petr V. Abramov © (06.07.05 14:58) [29]
> А в этом случае смысл какой???
Вот у тебя есть таблица с миллионом записей. В таблице поля "имя", "должность", "зарплата".
Должность распределена более или менее равномерна, допустим 8 значений. По этому полю сделан битовый индекс. Тебе надо найти среднюю зарплату для сотрудников, у которых должность "должность один" или "должность два". В этом случае индекс тебе выберет все нужные записи всяко быстрее, чем полный просмотр.
Petr V. Abramov (2005-07-06 14:58:00) [9]> Игорь Шевченко © (06.07.05 14:54) [27]
> в запросах выборки количествазаписей с одним значением
тогда да
> или в выборке множества записей, удовлетворяющих
> критерию "одно значение" или "другое значение"
А в этом случае смысл какой??? кроме ситуации [28]
Petr V. Abramov (2005-07-06 14:55:00) [10]Хотя может иметь смысл при ситуации типа 1000 значений на 50 миллионов записей.
Игорь Шевченко (2005-07-06 14:54:00) [11]Petr V. Abramov © (06.07.05 14:36) [26]
> А когда запрос идет по нескольким полям с малым количеством
> разных значений
Да без разницы, что несколько полей с низкой селективностью, что одно поле. Про преимущество индекса по одному полю с низкой селективностью я уже писал - в запросах выборки количества записей с одним значением, или в выборке множества записей, удовлетворяющих критерию "одно значение" или "другое значение"
Petr V. Abramov (2005-07-06 14:36:00) [12]Заставил-таки документацию посмотреть :)
Но смысл битового индекса по одному полю-то все равно - где? Только в одном случае - если значения распределены очень неравномерно, иначе fts опять будет выгоднее, т.к. чудес не бывает. А в этом случае и битмап городить необязательно.
А когда запрос идет по нескольким полям с малым количеством разных значений, вот тут и начинаются битовые операции.
Petr V. Abramov (2005-07-06 14:24:00) [13]> Игорь Шевченко © (06.07.05 14:13) [24]
> каждый бит в которой соответствует номеру записи для данного значения ключа.
Как бит может соответствовать номеру??? Таблицу из двух записей не рассматириваем :)
Игорь Шевченко (2005-07-06 14:13:00) [14]
> чего с чем конъюнкцию или дизъюнкцию?
Наборов битов, разумеется. Ведь битовые индексы как работают - у тебя есть битовая строка, каждый бит в которой соответствует номеру записи для данного значения ключа.
Так вот, для того, чтобы оценить количество записей, в которых ключевому полю соответствует данное значение, достточно посчитать количество единичных битов в индексе, для того, чтобы определить, в каких записях содержится одно или другое значение, достаточно взять две битовые строки (для каждого значения) и выполнить над ними операцию дизъюнкции (логического или) - в результирующей битовой строке каждому биту соотвествует нужная запись.
Petr V. Abramov (2005-07-06 14:03:00) [15]> Игорь Шевченко © (06.07.05 13:52) [22]
Ну может, дурак я :). Тем более что давно этим не занимался.
Но давай подойдем к этому так: ты в чудеса веришь? Если различных значений мало, какие ты конъюнкции с дизъюнкциями ни делай, это будет выгодней full table scan?
> и СУБД будет выполнять конъюнкцию или дизъюнкцию точно так же,
> как и в случае нескольких полей...
чего с чем конъюнкцию или дизъюнкцию?
Игорь Шевченко (2005-07-06 13:52:00) [16]Petr V. Abramov © (06.07.05 13:38) [21]
> Суть битмапа в том, что одно поле принимает мало разных
> значений, а комбинаций значений в нескольких полях уже имеющее
> смысл количество
А я-то дурак думал, что можно несколько значений одного поля указывать, и СУБД будет выполнять конъюнкцию или дизъюнкцию точно так же, как и в случае нескольких полей...
Petr V. Abramov (2005-07-06 13:38:00) [17]> Игорь Шевченко © (06.07.05 13:23) [20]
> А пачему ?
Ну как тебе сказать... :)
Суть битмапа в том, что одно поле принимает мало разных значений, а комбинацийзначений в нескольких полях уже имеющее смысл количество
Игорь Шевченко (2005-07-06 13:23:00) [18]
> Bitmap-индекс имеет смысл, если есть несколько полей, каждое
> из которых принимает малое количество различных значений.
То есть, по одному полю делать битмап-индекс смысла нет ? :)
А пачему ?
Petr V. Abramov (2005-07-06 13:17:00) [19]> Теория ведь не только к IB относится, верно ?
Почти :)
Bitmap-индекс имеет смысл, если есть несколькополей, каждоеиз которых принимает малое количество различных значений.
Игорь Шевченко (2005-07-06 11:36:00) [20]Petr V. Abramov © (05.07.05 22:11) [16]
Теория ведь не только к IB относится, верно ? Хотя, признаюсь честно, упоминание об IB я не разглядел сразу.