|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
krvsaРанее как-то писалось, что такое оптимальнее написать так Код: sql 1. 2.
Причем даже местами поменять Код: sql 1. 2. 3. 4.
Дату меняла разным способом- не помогло. Остался изначальный вариант с >= и <= ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:34 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaДату меняла разным способом- не помоглоЕсли запрос работает правильно с between, лучше оставить его, чем с >=, <=vichkaКак мне показать вам планы запросов? Скопировать и вставить здесь как текст или как?Да, давайте сюда как текст. Но хотелось бы сперва узнать: Вы мои и других участников варианты пробовали? Потому что я до сих пор вижу у Вас like '%'. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 18:52 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaИзвините за поздний ответ. Как мне показать вам планы запросов? Скопировать и вставить здесь как текст или как? Я прицепила ранее файл, кто-то сказал, что не все видно- это все что было, за исключением самих записей. Как мне тогда вам их предоставить?это я просто, слишком быстро просмотрел не заметил что там все верно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:11 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
АленочкаВопросы к автору : ResponseText берется из таблицы ResponseArchive? или MessageArchive? ResponseText берется из таблицы ResponseArchive. Ниже привела пример с полным названием полей. Аленочкапосмотрите раздел Query Optimization Options , в частности %NOFLATTEN и использование этой опции в подзапросах http://docs.intersystems.com/cache20081/csp/docbook/DocBook.UI.Page.cls?KEY=RSQL_from#RSQL_C22222 Пробовала с %NOFLATTEN - не лучше. Аленочкатак же думаю что вам могут помочь в форуме по MS SQL Server Про это тоже думала. Но не уверена- нюансы ли это Cache или SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:24 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servit vichka , Статистику по таблицам собирали? Да, TUNE TABLE все время делаю. Это называется СТАТИСТИКА по-русски? Я даже не знала. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:27 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Блок А.Н.У вас проблема, что включается использование индекса по MobileNumber, каше считает его оптимальным, но ошибается. Да, я это тоже поняла. Причем видно как выдаются записи по очереди группами сначала все номера 35383, потом 35385, потом 35386, потом 35387, потом 35389 (когда медленно). А в быстром варианте они посортированы другим образом (не знаю как), и все записи сразу высвечиваются, без группировок. Это когда запрс запускается из Management Portal. Блок А.Н.1. использовать подсказку %Ignoreindices. Не факт, что получится, так как это часть первичного ключа. Да, не факт. Пробовала отключить индекс, все равно делает то же самое, из-за первичного ключа, как я поняла Блок А.Н.2. использовать конструкцию select from ( select ... ) where MobileNumber ... Тогда основной запрос не будет использовать индекс, а фильтрация будет уже в промежуточных результатах Пробовала. Не помогло. Выполняется быстрее может на пару секунд. Блок А.Н.3. Искорежить поле MobileNumber так, чтобы каше не поняла, что по нему можно использовать индекс Типа where string(MobileNumber) like '%..' Корежила- string(MobileNumber), LOWER(MobileNumber)- То же самое. Пожалуй, самое простое - третий вариант.[/quot] ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:48 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Вот если бы вы выложили исходный код задействованных классов, без методов, только значимое (свойства, индексы) и и подправили так чтобы мы могли сгенерировать тестовые данные и тогда кто нибудь здесь бы смог бы подобрать наиболее оптимальный вариант запроса и схемы данных ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 19:56 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitНо хотелось бы сперва узнать: Вы мои и других участников варианты пробовали? Потому что я до сих пор вижу у Вас like '%'. Да, пробовала. MobileNumber IS NOT NULL works like a charm- 2 seconds! Только я что-то туплю- где мне это условие ставить, что textbox поле если пустое, то все номера выбирать Код: sql 1.
, а есле что-то там ввели, то это и передавать- 3538 например Код: sql 1.
Тогда это уже два запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:04 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichka, попробуйте выполнить мои рекомендации. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:08 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitЯ хотел бы увидеть планы и результаты моих трёх вариантов: подзапрос The results of executing the SQL query are shown below: Last update: 2013-06-06 17:05:14.473 SQLCODE: 100 Row count: 565 Performance: 61.659 seconds 48494 global references The execution plan is displayed below: Query Text Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Query Plan Relative cost = 17836 ◾Call module B, which populates temp-file A. ◾Read temp-file A, looping on MobileNumber, ResponseDate, and ID. ◾For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Read index map Client.MessageArchive.MobileNumber, using the given MobileNumber, and looping on ID. For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Output the row. module B ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber (with a %STARTSWITH range condition), and ResponseID. ◾For each row: Add a row to temp-file A, subscripted by MobileNumber, ResponseDate, and ID, with no node data. servit is not null The results of executing the SQL query are shown below: Last update: 2013-06-06 17:10:08.511 SQLCODE: 100 Row count: 565 Performance: 2.059 seconds 265349 global references The execution plan is displayed below: Query Text Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Query Plan Relative cost = 2593337 ◾Call module C, which populates temp-file A. ◾Read temp-file A, looping on MobileNumber, ResponseDate, and a counter. ◾For each row: Output the row. module C ◾Call module B, which populates temp-file B. ◾Read temp-file B, looping on ID. ◾For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Call module D, which populates temp-file C. Read temp-file C, using the given MobileNumber, and looping on ID. For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Check distinct values for MobileNumber and ResponseID using a temp-file. For each distinct row: Add a row to temp-file A, subscripted by MobileNumber, ResponseDate, and a counter, with node data of ResponseID, ResponseText, [value], and [value]. module B ◾Read index map Client.MessageArchive.DateArchived, looping on DateArchived (with a range condition) and ID. ◾For each row: Add a row to temp-file B, subscripted by ID, with no node data. module D ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber, and ResponseID. ◾For each row: Add a row to temp-file C, subscripted by MobileNumber and ID, with no node data. servit [ The results of executing the SQL query are shown below: Last update: 2013-06-06 17:12:57.039 SQLCODE: 100 Row count: 565 Performance: 63.781 seconds 48496 global references The execution plan is displayed below: Query Text Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Query Plan Relative cost = 19776 ◾Call module B, which populates temp-file A. ◾Read temp-file A, looping on MobileNumber, ResponseDate, and ID. ◾For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Read index map Client.MessageArchive.MobileNumber, using the given MobileNumber, and looping on ID. For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Output the row. module B ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber, and ResponseID. ◾For each row: Add a row to temp-file A, subscripted by MobileNumber, ResponseDate, and ID, with no node data. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:17 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Блок А.Н.vichka, попробуйте выполнить мои рекомендации. Блок А.Н., Пробовала- смотрите выше, описала... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:26 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
DAiMorВот если бы вы выложили исходный код задействованных классов, без методов, только значимое (свойства, индексы) ... Код: 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.
Код: 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. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:28 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaДа, пробовала. MobileNumber IS NOT NULL works like a charm- 2 seconds!Спасибо. vichkaТолько я что-то туплю- где мне это условие ставить, что textbox поле если пустое, то все номера выбирать <...> , а есле что-то там ввели, то это и передавать- 3538 например <...> Тогда это уже два запроса?Нет, можно в одном запросе: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:37 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitНет, можно в одном запросе <...> Должна сказать, что этих LIKE '%' очень много во всех запросах. Например, оригинальный запрос, над которым я бьюсь: Код: 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.
Как мне его заменить, используя IS NOT NULL? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 20:57 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Тут не сказали про хранение данных в индексе, что тоже очень хорошо влияет на скорость например Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 21:21 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaДа, TUNE TABLE все время делаю. Это называется СТАТИСТИКА по-русски? Я даже не знала.Да я тоже не местный, но судя по ... vichkaДолжна сказать, что этих LIKE '%' очень много во всех запросах. Не проблема заменить их все, там где это нужно. Например: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Хорошо бы, чтобы все поля, по которым ведётся поиск или соединение, были проиндексированы. Возможно, здесь на некоторые из них не помешали бы bitmap-индексы. Но пока попробуйте просто запрос поменять (и с/без %NOTOPOPT). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2013, 22:27 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitА у Вас в Ирландии как это называют? А так и говорят- DO Tune the table. OR: DID you Tune the Table? servitХорошо бы, чтобы все поля, по которым ведётся поиск или соединение, были проиндексированы. Да, я их все проиндексировала (см. выше начало классов с полями и индексами) servitНо пока попробуйте просто запрос поменять (и с/без %NOTOPOPT). Попробовала. Все равно же приходится ставить '%': %NOTOPOPT: The results of executing the SQL query are shown below: Last update: 2013-06-07 09:50:57.582 SQLCODE: 100 Row count: 557 Performance: 11.608 seconds 267469 global references The execution plan is displayed below: Query Text: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Query Plan Relative cost = 16822 ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber (with a %STARTSWITH range condition), and ResponseID. ◾For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Read index map Client.MessageArchive.MobileNumber, using the given MobileNumber, and looping on ID. For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Check distinct values for MobileNumber, %SQLUPPER(ResponseText), and ResponseDate using a temp-file. For each distinct row: Output the row. ------------------------------------- without %NOTOPOPT: The results of executing the SQL query are shown below: Last update: 2013-06-07 09:52:40.191 SQLCODE: 100 Row count: 557 Performance: 59.436 seconds 42768 global references The execution plan is displayed below: Query Text Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Query Plan Relative cost = 5816.2 ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber (with a %STARTSWITH range condition), and ResponseID. ◾For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Read index map Client.MessageArchive.MobileNumber, using the given MobileNumber, and looping on ID. For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Check distinct values for MobileNumber, %SQLUPPER(ResponseText), and ResponseDate using a temp-file. For each distinct row: Output the row. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 12:56 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaПопробовала. Все равно же приходится ставить '%':Передавайте null , если нужно выбрать всё, а не '%'. Если же '%' зашит в клиенте и это уже не изменить, то немного измените условие: вместо Код: sql 1.
поставьте Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:20 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
servitЕсли же '%' зашит в клиенте и это уже не изменить... Я тестирую эти запросы в WinSQL. Поэтому ставлю '%' , как вызывается из .NET. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 13:53 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
[quot servit] Передавайте null , если нужно выбрать всё, а не '%'. [quot] Ура! Получилось! Никак не могла врубиться в этот NULL ! SHOW PLAN: The results of executing the SQL query are shown below: Last update: 2013-06-07 11:59:06.554 SQLCODE: 100 Row count: 557 Performance: 1.667 seconds 267469 global references Query Text Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Query Plan Relative cost = 2540116 ◾Call module C, which populates temp-file A. ◾Read temp-file A, looping on ResponseDate and a counter. ◾For each row: Output the row. module C ◾Call module B, which populates temp-file B. ◾Read temp-file B, looping on ID. ◾For each row: Read master map Client.MessageArchive.Primary, using the given idkey value. Call module D, which populates temp-file C. Call module E, which populates temp-file D. Read temp-file D, using the given MobileNumber, and looping on ID. For each row: Check distinct values for MobileNumber, %SQLUPPER(ResponseText), and ResponseDate using a temp-file. For each distinct row: Add a row to temp-file A, subscripted by ResponseDate and a counter, with node data of MobileNumber, %SQLUPPER(ResponseText), [value], and [value]. module B ◾Read index map Client.MessageArchive.DateArchived, looping on DateArchived (with a range condition) and ID. ◾For each row: Add a row to temp-file B, subscripted by ID, with no node data. module D ◾Read index map Client.ResponseArchive.ResponseDate, looping on ResponseDate (with a range condition), MobileNumber, and ResponseID. ◾For each row: Add a row to temp-file C, subscripted by ID, with no node data. module E ◾Read temp-file C, looping on ID. ◾For each row: Read master map Client.ResponseArchive.Primary, using the given idkey value. Add a row to temp-file D, subscripted by MobileNumber and ID, with node data of ResponseDate and %SQLUPPER(ResponseText). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 15:06 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
DAiMorТут не сказали про хранение данных в индексе, что тоже очень хорошо влияет на скорость например Код: sql 1.
Как это? Вместо: Код: sql 1.
вот это: Код: sql 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 15:12 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
vichkaDAiMorТут не сказали про хранение данных в индексе, что тоже очень хорошо влияет на скорость например Код: sql 1.
Как это? Вместо: Код: sql 1.
вот это: Код: sql 1.
? Нет именно так как я и написал, это значит что если будут необходимы данные например для выборки или для выполнения дополнительных условий, то для того чтобы он их не искал в другом месте, данные будут сохранены в индекс, они будут не проиндексированы а сохранены вместе с индексом ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 15:18 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
DAiMor...Нет именно так как я и написал, это значит что если будут необходимы данные например для выборки или для выполнения дополнительных условий, то для того чтобы он их не искал в другом месте, данные будут сохранены в индекс, они будут не проиндексированы а сохранены вместе с индексом Я попробовала запустить старый запрос с новым индексом- не помогло. Зато когда заменила MobileNumber с '%' на MobileNumber с NULL , быстродействие значительно возросло! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 17:57 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
Спасибо всем за подсказки и оеративную помощь! Отдельное огромное спасибо SERVIT ! WRC отдыхает! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 17:59 |
|
Помогите оптимизировать SQL запрос
|
|||
---|---|---|---|
#18+
И последний вопрос- как мне заменить остальные , если там значения или выбранные из dropdownlist, a не из textbox как MobileNumber, или же все существующие? Так, если все записи, то заменить условия типа: Код: sql 1.
на: Код: sql 1.
--------------------------------- а если что-то выбрано, то вместо: Код: sql 1.
будет: Код: sql 1.
Запустила- особой разницы не увидела. Стоит ли заменять? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2013, 18:37 |
|
|
start [/forum/topic.php?fid=39&msg=38290859&tid=1557136]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 171ms |
0 / 0 |