|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Из тестового задания. Приведенный ниже запрос работает несколько минут. Код: sql 1. 2. 3. 4.
Поля TovarySkid.Skd и Skid.Skd индексированы кластерным индексом, Skid.Data проиндексированы некластеризованным индексом. Задача минимум: Написать этот запрос так, чтобы он работал на этих данных за указанный период менее минуты. Предложите, как нужно проиндексировать эти данные дополнительно, чтобы выполнить поставленную задачу? Задача максимум: Написать этот запрос так, чтобы он работал на этих данных менее минуты за любой период. Насколько я понимаю, конструкцию ON ... AND надо заменить на On ... Where. ============================================================================================================ "О, сколько нам открытий чудных готовит просвещения дух, и опыт - сын ошибок трудных, и гений - парадоксов друг, и случай - бог изобретатель" (Пушкин, однако). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 14:06 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
dab2, и где план запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 14:10 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Skidka - из какой таблицы? Код: sql 1.
- должно помочь... dab2 конструкцию ON ... AND надо заменить на On ... Where ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 14:11 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
iiyama, план пришлю немного погодя, если удастся получить (база не у меня). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 14:17 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Akina, индекс Skid (Skd, Data) не помог, выполнение больше 3 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 14:59 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
dab2 индекс Skid (Skd, Data) не помог, выполнение больше 3 минут. Нужно (Data, Skd) include (Skidka) или (Data) include (Skd, Skidka), если Skidka в таблице Skid. А вообще, пока не покажете хотя бы структуру таблиц, предлагать варианты бессмысленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2019, 15:22 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Таблицы сконструированы так: Skid Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
TovarySkid Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
По сути, SUM(TovarySkid.Skidka) - проиндексированное поле, а Skid.Data тоже индексировано. Поля связи: Skid.Skd - ключевое поле, TovarySkid.Skd - индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 03:59 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Ещё была мысль создать внешний ключ Код: sql 1. 2. 3. 4.
Но прав пока нет. Или как-то запрос переделать всё же надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 04:47 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
dab2 Или как-то запрос переделать всё же надо? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2019, 06:17 |
|
оптимизация запроса
|
|||
---|---|---|---|
#18+
Вот этот сработал за 2 с! With s as (SELECT * FROM dbo.Skid WHERE Skid.Data BETWEEN '20190901' AND '20190931') SELECT SUM(Skidka) as Скидка FROM TovarySkid WHERE EXISTS (SELECT Skd FROM S WHERE TovarySkid.Skd=S.Skd) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2019, 02:06 |
|
|
start [/forum/topic.php?fid=46&msg=39906428&tid=1686739]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 141ms |
0 / 0 |