Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Ранее работал только с MySQL. Обратил внимание на бесплатность IBM DB2 Express-C, впрочем и 3к в год за подписку не так и много. Вопрос в следующем. Многие туториалы по MySQL рекомендовали создавать индексы сразу по нескольким полям для экономии места, так сказать :) В DB2 сделал также, но получил то, что DB2 не использует индексы при выборки по полям, которые идут после первого поля(т.е. здесь это: XXX_TRAINER), по которым создавался индекс. Схема такая: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Соответственно запросы: Код: plaintext Код: plaintext По остальным то же самое. Когда удалил этот индекс и создал индекс по каждому полю отдельно - они, конечно же, стали использоваться. Проверял используется ли индекс с помощью программы db2expln . С чем это связано или просто я нуб и чего-то общеизвестного не знаю? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 13:35 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Хотел добавить, что IBM DB2 Express-C версии 9.7, установленная на Ubuntu 9.10 x64. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 13:42 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
AJetman Соответственно запросы: Код: plaintext Код: plaintext По остальным то же самое. Когда удалил этот индекс и создал индекс по каждому полю отдельно - они, конечно же, стали использоваться. Проверял используется ли индекс с помощью программы db2expln . С чем это связано или просто я нуб и чего-то общеизвестного не знаю? Только не говорите, что в MySQL второй запрос будет использовать тот ваш индекс. Собирайте статистику (скажем, runstats on СХЕМА.ТАБЛИЦА with distribution and detailed indexes all) и пользуйте Index Adviser (db2advis.exe под виндами). Скормите Index Adviser запрос, и он расскажет, какие индексы, по его мнению, нужно создать, чтобы этот запрос работал максимально быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 21:54 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Victor Metelitsa Только не говорите, что в MySQL второй запрос будет использовать тот ваш индекс. Собирайте статистику (скажем, runstats on СХЕМА.ТАБЛИЦА with distribution and detailed indexes all) и пользуйте Index Adviser (db2advis.exe под виндами). Скормите Index Adviser запрос, и он расскажет, какие индексы, по его мнению, нужно создать, чтобы этот запрос работал максимально быстро. Это я, вроде, нуб, но топикастер создаёт вложенный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 21:59 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Ой. Тогда я тоже нуб. Что такое "вложенный индекс"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 22:03 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaОй. Тогда я тоже нуб. Что такое "вложенный индекс"? Поторопился я писать. Я имел ввиду, с Код: plaintext А тут обычный индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 22:10 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Между CREATE INDEX XXXXXXX_IDX1 ON XXXXXXX (XXX_TRAINER, XXX_NAME, XXX_NAME2, XXX_DATA3); и CREATE unique INDEX XXXXXXX_IDX2 ON XXXXXXX (XXX_TRAINER) include (XXX_NAME, XXX_NAME2, XXX_DATA3); разница не особо велика (да, во втором случае поддерживается уникальность по первому списку, но если она (уникальность) в наличии, индексы будут содержать одни и те же данные). Когда XXXXXXX_IDX1 полезен для XXX_NAME? Напрашивается сказать "никогда". Хочется найти контрпример (если таблица "широкая", а индекс "узкий", так, что размером много меньше таблицы, не будет ли сделать полное сканирование там?), но SELECT * убивает эту возможность. Где полезен CREATE INDEX XXXXXXX_IDX1 ON XXXXXXX (XXX_TRAINER, XXX_NAME, XXX_NAME2, XXX_DATA3); в противовес CREATE INDEX XXXXXXX_IDX_n1 ON XXXXXXX (XXX_TRAINER); ? Наверное, в SELECT * FROM XXXXXXX WHERE XXX_TRAINER = 'XXXX' and XXX_NAME = 'XXXX'; Но гарантий нет. Оптимизатор посчитает и решит. Например, если первый индекс слишком большой.. А, быть может, решит вообще не использовать индексы, если таблица мала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 22:24 |
|
||
|
IBM DB2 Express-C - не используются индексы
|
|||
|---|---|---|---|
|
#18+
Victor MetelitsaНаверное, в SELECT * FROM XXXXXXX WHERE XXX_TRAINER = 'XXXX' and XXX_NAME = 'XXXX'; Я по сути это и подразумевал, что индекс будет использоваться только в запросе в связке с первой указанной колонкой при создании индекса. Т.е. вот как-нибудь так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.03.2010, 22:29 |
|
||
|
|

start [/forum/topic.php?fid=43&fpage=69&tid=1602828]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 155ms |

| 0 / 0 |
