Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть таблица лиц примерного содержания Face idFNMmmddyyyy1ИвановИванИванович010119702ПетровПетрПетрович020219803СергеевСергейСергеевич030319904МарковМаркМаркович01021981 запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как правильно поступить с индексами? 1. сделать индекс на все поля в разделе where 2. сделать один покрывающий индекс 3. сделать 1. и 2. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 13:11 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
АлексашаЗдравствуйте. Есть таблица лиц примерного содержания Face idFNMmmddyyyy1ИвановИванИванович010119702ПетровПетрПетрович020219803СергеевСергейСергеевич030319904МарковМаркМаркович01021981 запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как правильно поступить с индексами? 1. сделать индекс на все поля в разделе where 2. сделать один покрывающий индекс 3. сделать 1. и 2. ? п.2, т.к. запрос всегда идет по всем полям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:18 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
monseniorАлексашаЗдравствуйте. Есть таблица лиц примерного содержания Face idFNMmmddyyyy1ИвановИванИванович010119702ПетровПетрПетрович020219803СергеевСергейСергеевич030319904МарковМаркМаркович01021981 запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как правильно поступить с индексами? 1. сделать индекс на все поля в разделе where 2. сделать один покрывающий индекс 3. сделать 1. и 2. ? п.2, т.к. запрос всегда идет по всем полям. покрывающий что? все поля из таблицы? каждый такой запрос будет читать весь этот индекс, чем это лучше скана кластерного индекса или кучи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:21 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
monsenior, конструкция a = a не делает использование "всех" полей. Алексаша если нет обязательных полей, то в общем-то всё без разници, или создать комбинацию на большинство случаев ака F,N,M ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:30 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Функция в условиях отбора - это фуллскан, так что пофиг индексы. Преобразуйте условия в комбинацию (field = @var OR @var IS NULL) , тогда оптимизатор вычислит выражения с константой ещё на стадии анализа, одно из двух условий отбросит, и сможет использовать индекс(ы). Впрочем, для полной оптимальности тех индексов потребуется штук 20 навскидку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:31 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
АлексашаЗдравствуйте. Есть таблица лиц примерного содержания Face idFNMmmddyyyy1ИвановИванИванович010119702ПетровПетрПетрович020219803СергеевСергейСергеевич030319904МарковМаркМаркович01021981 запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. как правильно поступить с индексами? 1. сделать индекс на все поля в разделе where 2. сделать один покрывающий индекс 3. сделать 1. и 2. ? Если хотите индексированного поиска, то 1. Перепишите isnull на (F = @F or @f is null) 2. Добавьте option(recompile) в конец запроса 3. Самое сложное. Нужно понять, скорости работы при указании (не null) каких из параметров этой процедуры вы ожидаете. Какие их комбинации устанавливаются одновременно. Исходя из этого создать нужные индексы. Например, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N 2. Дату рождения у вас всегда ищут как день + месяц, иногда уточняют год Сделали индекс по полям dd, mm, yyy Серебряной пули (одного индекса) которая решит все возможные кейсы - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:40 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
msLex3. Самое сложное. Нужно понять, скорости работы при указании (не null) каких из параметров этой процедуры вы ожидаете. Какие их комбинации устанавливаются одновременно. Исходя из этого создать нужные индексы. Например, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N 2. Дату рождения у вас всегда ищут как день + месяц, иногда уточняют год Сделали индекс по полям dd, mm, yyyПомню, накапливал статистику для подобного случая. Потом сделал несколько индексов, покрывающих 99% запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:43 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgmsLex3. Самое сложное. Нужно понять, скорости работы при указании (не null) каких из параметров этой процедуры вы ожидаете. Какие их комбинации устанавливаются одновременно. Исходя из этого создать нужные индексы. Например, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N 2. Дату рождения у вас всегда ищут как день + месяц, иногда уточняют год Сделали индекс по полям dd, mm, yyyПомню, накапливал статистику для подобного случая. Потом сделал несколько индексов, покрывающих 99% запросов. если объёмы не фантастика, то можно и от обратного, наклепать, через месяц удалить не используемые :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:47 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgmsLex3. Самое сложное. Нужно понять, скорости работы при указании (не null) каких из параметров этой процедуры вы ожидаете. Какие их комбинации устанавливаются одновременно. Исходя из этого создать нужные индексы. Например, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N 2. Дату рождения у вас всегда ищут как день + месяц, иногда уточняют год Сделали индекс по полям dd, mm, yyyПомню, накапливал статистику для подобного случая. Потом сделал несколько индексов, покрывающих 99% запросов. Спасибо за пример-подтверждение. Значит подобный подход к поиску по разным комбинациям фильтров распространен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:48 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Парни, всем спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:50 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
msLex, msLexНапример, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N Индекс покрывающий т.е. 2 поля? Не два индекса по одному полю в каждом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:54 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
TaPaKalexeyvgПомню, накапливал статистику для подобного случая. Потом сделал несколько индексов, покрывающих 99% запросов. если объёмы не фантастика, то можно и от обратного, наклепать, через месяц удалить не используемые :)Дык сколько их делать, сотню? Комбинаций то много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:58 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
АлексашаmsLex, msLexНапример, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N Индекс покрывающий т.е. 2 поля? Не два индекса по одному полю в каждом? Для этого примера два поля, и именно в этом порядке В этом случае, он будет работать как при фильтре только по фамилии так и при фильтре по фамилия + имя Опять же, вполне может хватить и фильтра просто по фамилии, если она почти уникальна в ваших данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:58 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
АлексашаmsLex, msLexНапример, 1. Вы выяснили, что самым частым случаем является поиск по фамилии, иногда добавляют имя Сделали индекс по полям F, N Индекс покрывающий т.е. 2 поля? Не два индекса по одному полю в каждом?Да. Собстьвенно, индекс по мм вряд ли имеет смысл делать отдельно, селективность низкая. Ну и вообще, индекс на несколько полей всегда лучше, если все эти поля используются в запросе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 14:59 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgTaPaKпропущено... если объёмы не фантастика, то можно и от обратного, наклепать, через месяц удалить не используемые :)Дык сколько их делать, сотню? Комбинаций то много. ну если не думать то 120 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 15:14 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Кстати, а запрос не кривоватый? А то ведь отчество иногда пустым бывает. Или там не NULL, а '' в таблице будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 15:26 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
msLexСеребряной пули (одного индекса) которая решит все возможные кейсы - нет.Есть. Полнотекстовый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 15:41 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Неужели планируются запросы, возвращающие строки только по первым числам или по декабрям? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 15:57 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовНеужели планируются запросы, возвращающие строки только по первым числам или по декабрям? Отдельно - вряд ли. А вот, например, за 1-е декабря, независимо от года, запросто. Стандартная задача поиск сотрудников, у которых сегодня ДР. invmЕсть. Полнотекстовый. Есть еще CS. Они универсальнее, но обычно проигрывают по скорости специально созданным индексам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 16:42 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Владислав КолосовНеужели планируются запросы, возвращающие строки только по первым числам или по декабрям?Всё правильно, ну вот и нужно понять, какие сочетания обычны, а какие невероятны. Как понять? Наверное, лучше всего собрать статистику, потому что для каждой предметной области типичны свои сочетания. По первым числам - например, секретарша смотрит, у кого там день рождения сегодня, 16-го. (ввести 16 апреля, а не просто 16, ей не приходит в голову - она и так увидит в списке, у кого из них в апреле; все бухгалтеры и секретарши прекрасно знают, что проще выгрузить огромную таблицу, правильно отсортировать, и потом пролистать, чем накладывать фильтры) :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 21:12 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
msLexЕсть еще CS. Они универсальнее, но обычно проигрывают по скорости специально созданным индексам.Да. Только я не про вообще, а про конкретную задачу ТС. Добавляется вычисляемый столбец с, например, таким содержимым Код: sql 1. и по нему строится полнотекстовый индекс с отключенным стоп-листом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 21:47 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmДобавляется вычисляемый столбец с, например, таким содержимым Код: sql 1. и по нему строится полнотекстовый индекс с отключенным стоп-листом.А чем это будет эффективнее отдельных индексов по полям? Веть FTS будет искать в индексе наборы про нескольким значениям (словам), и искать пересечение. И сиквел может искать по нескольким обычным индексам подмножества, и искать пересечение. Может, в FTS это делается эффективнее, но мне не верится, ядро из 90-х они пока в своих надстройках не превзошли :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.04.2019, 22:37 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgВеть FTS будет искать в индексе наборы про нескольким значениям (словам), и искать пересечение. И сиквел может искать по нескольким обычным индексам подмножества, и искать пересечение.При использовании множества индексов по столбцам: - как часто вы наблюдали план, в котором оптимизатор самостоятельно решил строить пересечение более чем двух индексов? - каким образом обеспечить неизменность запроса при добавлении/удалении/усложнении критериев поиска? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 09:34 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmalexeyvgВеть FTS будет искать в индексе наборы про нескольким значениям (словам), и искать пересечение. И сиквел может искать по нескольким обычным индексам подмножества, и искать пересечение.При использовании множества индексов по столбцам: - как часто вы наблюдали план, в котором оптимизатор самостоятельно решил строить пересечение более чем двух индексов? - каким образом обеспечить неизменность запроса при добавлении/удалении/усложнении критериев поиска?Более двух не видел, но разве этого мало? Наверное, сервер считает, что быстрее просканировать небольшой результат, чем искать пересечение с третьим огромным подмножеством? Вот как сервер ищет в FTS? Он точно будет джойнить три независимых поиска, или ограничится двумя, и отфильтрует результат? Думаю, что оптимальный путь зависит от конкретных данных. Второй пункт не понял, зачем обеспечивать неизменность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 10:16 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgНаверное, сервер считает, что быстрее просканировать небольшой результат, чем искать пересечение с третьим огромным подмножеством?Так вот это и проблема - получить пересечение двух индексов в объеме, достаточном, чтобы потом *Lookup с фильтрацией не убил производительность. Можете такое гарантировать без ручных оптимизаций? alexeyvgВторой пункт не понял, зачем обеспечивать неизменность?Чтоб не переписывать всякий раз запрос. К тому же, асинхронно поддерживать один FTI может оказаться банально выгоднее синхронной поддержки N индексов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 10:45 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39802269&tid=1687946]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
47ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 262ms |
| total: | 420ms |

| 0 / 0 |
