Этот баннер — требование Роскомнадзора для исполнения 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 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmК тому же, асинхронно поддерживать один FTI может оказаться банально выгоднее синхронной поддержки N индексов. Выгоднее, скорее всего, будет при достаточно интенсивных изменениях. Но при таком типе нагрузке встает вопрос о допустимости асинхронной поддержки индекса, ведь в этом случае асинхронно обновляемый FTI будет быстро терять актуальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:12 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
msLexНо при таком типе нагрузке встает вопрос о допустимости асинхронной поддержки индекса, ведь в этом случае асинхронно обновляемый FTI будет быстро терять актуальность.Не обязательно. Много индексов и wide-планы их обновлений уже дадут допнагрузку на tempdb. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:40 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmalexeyvgНаверное, сервер считает, что быстрее просканировать небольшой результат, чем искать пересечение с третьим огромным подмножеством?Так вот это и проблема - получить пересечение двух индексов в объеме, достаточном, чтобы потом *Lookup с фильтрацией не убил производительность. Можете такое гарантировать без ручных оптимизаций?Мы же говорим о рутинных обычных случаях. О простых запросах, как привёл ТС вначале. Сервер по статистикам сам будет понимать, какая там селективность, что выгоднее, один индекс, или два, и какие именно (например, из 5 полей). Конечно, он может ошибаться, но вероятность не очень большая, тут же нету наворотов в виде десятков джойнов, и подзапросов с группировками. И ещё, для таких сложных навороченных запросов и FTS окажется бессильным, правильно? По крайней мере, создать отдельные индексы может быть неплохой идеей в дополнение к небольшому числу покрывающих инедксов, созданных на основании статистики вызовов. invmК тому же, асинхронно поддерживать один FTI может оказаться банально выгоднее синхронной поддержки N индексов.Вот не уверен, что при большой нагрузке FTS предпочтительнее. То есть с точки зрения быстроты выполнения изменяющих запросов без сомнения, но вот общая производительность, нагрузка на сервер, тут не уверен, что лучше. Но, конечно, стоимость обновлений нужно учитывать, это без сомнения. Думаю, что конкретно у ТС проблема всё таки в чтении/поиске, но тем не менее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:40 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmmsLexНо при таком типе нагрузке встает вопрос о допустимости асинхронной поддержки индекса, ведь в этом случае асинхронно обновляемый FTI будет быстро терять актуальность.Не обязательно. Много индексов и wide-планы их обновлений уже дадут допнагрузку на tempdb. wide планы вряд ли появятся при добавлении/обновлении нескольких записей, они характерны для массовых изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:42 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmmsLexНо при таком типе нагрузке встает вопрос о допустимости асинхронной поддержки индекса, ведь в этом случае асинхронно обновляемый FTI будет быстро терять актуальность.Не обязательно. Много индексов и wide-планы их обновлений уже дадут допнагрузку на tempdb.Обязательно. Обязательно при поиске только что вставленной записи FTS её не найдёт. Так что нужно будет аккуратно. FTS предназначен всё таки для приблизительного, оценочного поиска, он не гарантирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:43 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
Как-то гдубоко копнули... Если в таблице кончено не всё население планеты, то протого подхода вполне будет достаточно. Можно вообще сложить FNM в одно поле ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:44 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgМы же говорим о рутинных обычных случаях. О простых запросах, как привёл ТС вначале. Сервер по статистикам сам будет понимать, какая там селективность, что выгоднее, один индекс, или два, и какие именно (например, из 5 полей).Даже в рутинном случае, достаточно заменить несколько and на or чтобы все стало не так радужно. alexeyvgДумаю, что конкретно у ТС проблема всё таки в чтении/поиске, но тем не менее.Ну вот пускай ТС и оценивает предложенные варианты. Мы можем лишь теоретизировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 11:51 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
invmalexeyvgМы же говорим о рутинных обычных случаях. О простых запросах, как привёл ТС вначале. Сервер по статистикам сам будет понимать, какая там селективность, что выгоднее, один индекс, или два, и какие именно (например, из 5 полей).Даже в рутинном случае, достаточно заменить несколько and на or чтобы все стало не так радужно.Я не спорю, да и с and оно не радужно, не так, как при поиске по составному индексу. Я просто писал к тому, что не вижу, почему FTS прои таких же условиях будет искать быстрее. Просто не понимаю, с чего ему быть быстрее. Глобальные принципы поиска информации компьютером ведь остаются неизменными. Если бы FTS делал бы индекс по всем комбинациям слов :-) , но такого же не может быть. ИМХО он ищет ровно так же, как обычный индекс. Отличия FTS от обычных индексов в том, что он а) использует промежутоный морфологический справочник, и б) самостоятельно индексирует слова. А так, в остальном, его принципы поиска не могут быть другими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 14:47 |
|
||
|
Какой индекс(ы) будет оптимально
|
|||
|---|---|---|---|
|
#18+
alexeyvgЯ просто писал к тому, что не вижу, почему FTS прои таких же условиях будет искать быстрееТак я вроде не писал, что будет быстрее. Я писал, что множество обычных индексов можно заменить одним полнотекстовым. А что будет быстрее очень сильно зависит от данных и условий поиска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.04.2019, 15:48 |
|
||
|
|

start [/forum/topic.php?all=1&fid=46&tid=1687946]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 261ms |
| total: | 410ms |

| 0 / 0 |
