Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Индексация поля [D6, IB6.x]


Страницы:   1 2

Жук ©   (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 я не разглядел сразу.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо