![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ИНДЕКСЫ, ИНДЕКСЫ, ИНДЕКСЫ......... [D7, IB6.x]
Sable © (2004-02-05 00:50:00)
Друзья мои, разрешите мое заблуждение...
Существует таблица, с кучей полей
Field1
Field2
Field3
Field4
По улсловиям задачи, необходимо организовать быстрый поиск по любому набору полей. Как сделать правильно: создать индексы на все возможные комбинации или один индекс со всеми полями ?
Sable_W (2004-02-05 12:18:00) [1]
Ок Johnmen, спасибо... :)
Johnmen (2004-02-05 12:14:00) [2]
>Sable_W (05.02.04 12:11)
Не знаю. Т.к. твой случай не знаю...
"панацея" - мифологическое лекарство от всехболезней.
В природе не существует...:)
Sable_W (2004-02-05 12:11:00) [3]
to Johnmen
Ну а в моем случае какая может быть панацея? или действительно описывать все и вся ?
Johnmen (2004-02-05 12:02:00) [4]
>Sable_W (05.02.04 11:58)
>Какие могут быть факторы
1. Общее количество индексов
2. Селективность индексов
3. Количество записей в таблице
...
Sable_W (2004-02-05 11:58:00) [5]
to Johnmen
Я знаю только максимальное число возможных параметров, но большей части из них может и не быть. Запрос создается во время выполнения динамически в ответ на телодвижения юзверя...
Какие могут быть факторы (ну хоть приблизительно...)
Johnmen (2004-02-05 11:54:00) [6]
>А если на момент выполнения я не знаю сколько будет параметров...
... ?
>И насколько медленно будет проходить вставка ?
Я уже говорил, что это зависит от ряда факторов...
Конкретное число раз никто назвать не сможет :)
Sable_W (2004-02-05 11:41:00) [7]
А если на момент выполнения я не знаю сколько будет параметров... запрос строится и таблицы join"ся когда параметры уже юзверем указаны... И насколько медленно будет проходить вставка ?
Johnmen (2004-02-05 11:36:00) [8]
>Sable_W (05.02.04 11:11)
Для минимизации скорости выполнения достаточно индексов на
table1.table2id,table2.table2id,
table1.table3id,table3.table3id,
...
TableY.TableXid,TableX.TableXid
и
table1.value1,table2.value2,table3.value3,...,tableX.valueY
Sable_W (2004-02-05 11:11:00) [9]
to Johnmen ©
Ну скажем сдесь запрос такой
Select * from table1
Join table2 on table1.table2id=table2.table2id
join table2 on table1.table3id=table3.table3id
...
join tableX on TableY.TableXid=TableX.TableXid
Where table1.value1=Value1,
table2.value2=Value2,
table3.value3=Value3,
...
tableX.valueY=ValueY
И затевается все для получения набора данных из Table1...
Johnmen (2004-02-05 11:00:00) [10]
>...не будет дико тормозить ?
Тормозить будет. Величина торможения зависит от ряда некоторых условий...
>И будет ли IB использовать эти наборы при селекте без явного указания плана ?
Зависит опять-таки от вида запросов.
Sergey13 (2004-02-05 10:55:00) [11]
2SasaR (05.02.04 10:40) [3]
>не будет дико тормозить ?
Будет. Это как рычаг - выигрываешь в силе, проигрываешь в расстоянии (или как то так 8-). Конкретная конструкция зависит от задачи.
SasaR (2004-02-05 10:40:00) [12]
Понимаю, что некультурно задавать вопрос в другой ветке, но пусть ответ на него расширит наши горизонты в этой области:
Разве вставка в такую таблицу с такими индексами как в предыдущем примере не будет дико тормозить ? И будет ли IB использовать эти наборы при селекте без явного указания плана ?
Johnmen (2004-02-05 09:39:00) [13]
Если самое главное "организовать быстрый поиск по любому набору полей", а на остальные отрицательные моменты наплевать, то "на все возможные комбинации". Причем достаточно
Field1,Field2,Field3,Field4,
Field1+Field2,Field1+Field3,Field1+Field4,Field2+Field3,Field2+Field4,Field3+Field4,
Field1+Field2+Field3,Field1+Field2+Field4,Field1+Field3+Field4,Field2+Field3+Field4,
Field1+Field2+Field3+Field4
Кщд (2004-02-05 05:40:00) [14]
в такой постановке - на все возможные, т.е. все сочетания без учета порядка