|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Дорогие друзья, помогите оптимизировать запрос! Запрос читает события в БД, где заведены события по выводу в ремонт генераторов. Затем он их нехитро обрабатывает, готовит матрицу и ставит в нее маркер, когда завтра оборудование будет в ремонте (по часам завтрашних суток). Все прекрасно работает, но долго (30 сек). В каком направлении оптимизировать? Видимо, дело в моем безумном объявлении таблицы с LEFT JOIN по "1=1"? Заранее спасибо за помощь? Код: 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. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 04:52 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Исходные таблицы, их DDL, включая индексы. Количество записей в исходных таблицах. План запроса. Статистика запроса. В каком инструменте отлаживаешь запрос? Версия сервера Firebird. Пробовал отключать запрос частями? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 10:42 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441, Перемести содержимое юнионов в соответствующие таблички. Само по себе это, может быть, и не ускорит запрос, но поднимет общую культуру разработки и создаст почву для дальнейшей оптимизации. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 11:13 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Vlad F, спасибо! Можно попросить пример? Я не разобрался, к сожалению, как это правильно сделать, хоьть и думал в этом направлении ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 11:28 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Отформатировал запрос что бы было понятнее что там есть Код: plsql 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. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271.
Налицо:
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 11:46 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Какое количество записей в RECORS и FOLDERS? Каковы их DDL? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 11:48 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Рассмотрим первые 3 части запроса. Код: plsql 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.
В результате вышепроцитированное заменяется на полностью аналогичное: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Либо такое, если поле target нам все-так нужно: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:07 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 Vlad F, спасибо! Можно попросить пример? Я не разобрался, к сожалению, как это правильно сделать, хоьть и думал в этом направлении Это сделать примерно так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но тут так же возникает масса вопросов.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:25 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Кто автор исходного запроса? Ты сам, или просто "досталось по наследству"? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:31 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Автор исходного запроса я(( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:38 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Этот запрос засовывается в информационную Систему. Комментарии из запросов прихродится удалять, с ними не работает. таких запросос там много и, чтобы не запутаться, я придумал удобную штуку - в начале каждого запроса вставлять псевдотаблицу из одной строки, в которой пишу информацию о запросе. В данном случае - 'Генерация.Профиль на +1 сутки.Рев.2.2 19.12.21' Она функционально не нужна, но служит в качестве удобного заголовка запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:40 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, База закрытая. Теоретически можно попробовать согласовать доступ, но мне пока не хотелось бы. Можно попросить пока попробовать оптимизировать запрос исходя из того, что доступа на созданию таблицы нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:43 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Вот это я увидел во ФлеймРобин на вкладках DDL: Код: 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.
Надеюсь, это именно то, что Вы мне сказали направить. Если нет, то уточните, пож-та, что это. Кол-во записей смешное: FOLDERS - 50 RECORDS - 500 FireBird 2.5.6 Flime Robin 0.9.3 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 12:57 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, Этот запрос засовывается в информационную Систему. Комментарии из запросов приходится удалять, с ними не работает.
Begimot441 таких запросос там много и, чтобы не запутаться, я придумал удобную штуку - в начале каждого запроса вставлять псевдотаблицу из одной строки, в которой пишу информацию о запросе. Я у себя использую именование так - первой строкой запроса, в комментарии пишется имя формы и имя компонента с запросом. Ниже - комментарии. Использую для того что бы при просмотре запросов через таблицы мониторинга было понятно куда идти разбираться с запросом. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:23 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, База закрытая. Теоретически можно попробовать согласовать доступ, но мне пока не хотелось бы. Можно попросить пока попробовать оптимизировать запрос исходя из того, что доступа на созданию таблицы нет? Можно и так. А не проще было бы спросить эти вопросы у "старших товарищей" - есть же кто-то кто занимается разработкой и обслуживанием этой базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:26 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, Вот это я увидел во ФлеймРобин на вкладках DDL: Код: sql 1. 2.
Надеюсь, это именно то, что Вы мне сказали направить. Если нет, то уточните, пож-та, что это. Да, это оно. Begimot441 Кол-во записей смешное: FOLDERS - 50 RECORDS - 500 Да, 30 секунд на обработку этих записей - очень дофига. Можно ли получить эти записи в виде insert-скрипта что бы создать себе стенд для отладки? Без данных оптимизировать сложнее, а напихивать туда левые данные совершенно нет охоты. Можно какие-то данные обфусцировать, и брать только те поля которые фигурируют в запросе. Begimot441 FireBird 2.5.6 Flime Robin 0.9.3 А почему FlameRobin а не IBExpert? Вы не в России? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:30 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Я то в России, но Система, с которой я работаю, разработана за океаном. Видимо, поэтому такой выбор. Данные я могу предоставить. Они не содержат никакой ценности. Только вот я не нашел, как сделать приличный экспорт. А вас не устроит, если я выгружу полный SELECT из этих таблиц? (если нет, то сделаю INSERT на базе выгрузки....как нибудь) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:41 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441А вас не устроит, если я выгружу полный SELECT из этих таблиц? Нас устроит заполненный https://dbfiddle.uk/?rdbms=firebird_3.0 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:44 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Begimot441А вас не устроит, если я выгружу полный SELECT из этих таблиц? Нас устроит заполненный https://dbfiddle.uk/?rdbms=firebird_3.0 Лично не понял про что это :) А версия сервера автором топика тут была сообщена. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:47 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraksЛично не понял про что это :) Это место, куда ТС может загнать свои данные чтобы позволить остальным испытать на них свои варианты запроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:53 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Поясни чуть подробнее. Фидл - это имитатор БД, насколько я понял. Нужно, чтобы я заполнил его реальными данными? Если да, то для этого надо написать скрипт, который создает таблицы и заполняет ее реальными данными? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:58 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, Я то в России, но Система, с которой я работаю, разработана за океаном. Видимо, поэтому такой выбор. Данные я могу предоставить. Они не содержат никакой ценности. Только вот я не нашел, как сделать приличный экспорт. IBExpert умеет в приличный экспорт :) Для компов с кодовой страницей 1251 он бесплатен. Буржуям из бесплатного - на FlamerRobin, а ты если будешь и дальше заниматься Firebird - бери IBExpert. Begimot441 А вас не устроит, если я выгружу полный SELECT из этих таблиц? (если нет, то сделаю INSERT на базе выгрузки....как нибудь) Ну полный select и нужен, просто в виде insert-скрипта его было бы удобно загрузить в базу, иначе нужно выеживаться с импортом. Давай как сможешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 13:59 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, Поясни чуть подробнее. Фидл - это имитатор БД, насколько я понял. Нужно, чтобы я заполнил его реальными данными? Если да, то для этого надо написать скрипт, который создает таблицы и заполняет ее реальными данными? Это не ко мне а к Сибирякову, он этот вариант предложил. я им не пользовался, ничего сказать не могу. И разбираться с этим сервисом желания нету. Тем более что ХЗ как он там запросы обрабатывает и насколько это сопоставимо с реальным сервером. Тем более что твоего Firebird 2.5.6 там нету. Там только FB3.0 что не совсем одно и то же. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 14:07 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, Направляю полную выгрузку двух таблиц. Заранее благодарю! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 14:26 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441Запрос читает события в БД, где заведены события по выводу в ремонт генераторов. Затем он их нехитро обрабатывает, готовит матрицу и ставит в нее маркер, когда завтра оборудование будет в ремонте (по часам завтрашних суток). То есть ты хочешь на выходе табличку, где по горизонтали - часы завтрашних суток, по вертикали - список оборудования, а на пересечении стоит галочка для оборудования, которое в данный час будет в ремонте. При этом у тебя нет таблицы с текущим состоянием оборудования, а только таблица с историей его изменения, да и та недокументирована и неформализована, а заполняется от руки. Я правильно понял задачу? PS: Хотя глядя на таблицу RECORDS у меня закрадывается впечатление, что вся твоя портянка сворачивается до тривиального "where INSERVICE=1 AND tomorrow between DUEDATE and DUEDATE+DURATION". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 14:33 |
|
|
start [/forum/topic.php?fid=40&fpage=2&tid=1559857]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 245ms |
total: | 397ms |
0 / 0 |