|
21.08.2014, 06:13 | #1 |
Участник
|
А когда становятся необходимы индексы?
так случилось что на таблице SalesParmTable у меня есть дополнительное поле f1. В Dax4 пишу запрос с фильтром по этому полю который в итоге в sql превращается в запрос
X++: SELECT A.f1,A.PARMID FROM salesparmTable A WHERE ((DATAAREAID=N'comp') AND (((F1=N'ИД14213833') AND (ORDERING=5)) AND (PARMJOBSTATUS=0))) По ощущениям запрос исполняется одинаково мгновенно - что есть индекс по полю F1 что нет. Я наконец задумался, а с какого объема таблицы надо задумываться об индексах по поисковым полям? SQLSrver если чо 10.50.4000.0 |
|
21.08.2014, 10:08 | #2 |
Участник
|
Может поможет http://blogs.msdn.com/b/axinthefield...namics-ax.aspx
|
|
21.08.2014, 17:22 | #3 |
Участник
|
Мне кажется, что тут больше не в количестве записей дело. Смотреть и экспериментировать нужно на реальной базе в реальных условиях, например, как часто выполняются запросы. Если такой запрос 1 в день, то вряд ли нужно делать отдельный индекс. Не исключено, что у Вас разница небольшая из-за того, что в базе только Вы и больше никто не обращается к этой таблице.
PS: вопрос не по индексу, а уже по подходу к данным. А что делает в SalesParmTable 1,5 миллиона записей? Это же таблица только на время разноски и, может быть, для каких-то разборок некоторое время после разноски (типа посмотреть, были ли ошибки с тем же документом в прошлые попытки). Её же, по хорошему, нужно периодически чистить. Я видел пару реализаций, в которых данные этой таблицы использовались в отчетах и даже в логике функционала, но это явно были ошибки проектирования - такие поля, если они требуются, нужно тянуть в сами документы. |
|
21.08.2014, 17:41 | #4 |
Участник
|
Ну и, в первую очередь, многое зависит от самих данных в этих полях. То есть, то будет ли индекс селективным. Если смотреть на этот запрос, то тут явно:
Как-то так. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
22.08.2014, 04:48 | #5 |
Участник
|
Да, согласен с тем что таблица эта была зря использована при проектировании. Но так уже случилось. Отборочных в нашем случае в этой таблице как раз большинство. больше половины. Компания фактически одна. Поле f1 это аналог parmId. Связка отборочных по некому нашему условию обработки. Но повторяемость этого значения максимум 4-5 записей. Выборки аналогичные этому запросу по параметру у нас делаются во многих местах и в обработке документов и в отчетах даже. Поэтому то я и обратил внимание поле запроектировано, используется, а индекса нет. Причем тормозов на таких запросах особо не заметил. Но вроде как интуиция подсказывает что индекс должен быть. Решил поэкспериментировать добавить индекс. Да, план запроса в SQL меняется на использование индекса. Но улучшения на порядок или даже в разы, как было в других похожих случаях, не обнаружено. И это мне показалось странным. Возможно конечно допуская я както не некорректно проводил тест. Но как тогда правильно проверить эффективность добавления индекса?
|
|
22.08.2014, 11:31 | #6 |
Участник
|
Между экспериментами буферы на MS SQL сбрасывали?
Судя по Цитата:
Но повторяемость этого значения максимум 4-5 записей
Цитата:
план запроса в SQL меняется на использование индекса
Кстати, поле F1 в индексе первым идет (ну, не считая DATAAREAID)? |
|
|
|