|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#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 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ты почти все верно понял. Но нужна немного иная таблица. Для каждого из 59 единиц оборудования нужно 24 строки. Каждая строка - час завтрашних суток. Если в ремонте, то ставлю маркер. Вот окончание запроса, которое я отрезал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Далее эти 59х24 строки поступают на вход Системы, которая уже их обрабатывает нужным образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 14:44 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441Вот окончание запроса, которое я отрезал Вот поэтому-то и надо с данным вопросом идти не на форум, а к старшим товарищам, которые знают конкретную базу конкретной системы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 15:08 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, А что эти товарищи могут сказать? Чем помочь? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 15:10 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Расскажут как и из каких таблиц правильно доставать нужную информацию. Хотя бы для того чтобы не хардкодить в запросе список оборудования и не доставать операцию из описания. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 15:23 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Ну что, начнем оптимизацию :) Я целиком ЗА обращение к старшим товарищам, ибо как именно задумана структура данных иначе маловероятно получить, тем более что структура хоть и не самая плохая, но теми же FK - не страдает. Судя по показанным тут DDL Но чисто из любопытства попробую показать процесс оптимизации для начинающих :) Берем начало и смотрим статистику. Код: 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.
Получить на 458 записей 210 тысяч чтений - это круто. Но это явно херня. Конструкция and (Id IN (SELECT Id FROM freshIdWithTarget)) явно не для этих случаев. Однако, у нас же псевдотаблица, чего мы с ней по человечески, джойном, не работаем?? Код: 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.
И вместо 210 тысяч чтений мы получаем 458 штук натуралом + 161 штуку через индекс. Уже лучше чем было. Если что - исходный запрос с данными, я вообще не дождался окончания выполнения, срубил его :) Если у тебя он выполняется за 30 секунд - у вас очень хороший сервер. Или ты чего-то не договариваешь. Предоставляешь не ту инфу с которой работаешь сам. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 16:46 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Мдя. Последний join Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
fullCombin (1416 записей, ) correctHours (4 записей, 1832+696 чтений) дает 1416 записей при (ni=2 360 760 + i=980 280) чтений. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 17:23 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, спасибо! Я применил первую рекомендации + убрал кое-что лишлее и полный запрос вместо минуты стал работать 20 сек. По поводу "недоговариваешь". Я могу что-то путать по неопытности, но не вру. См. картинку. Старшие товарищи....Хорошо звучит, но плохо работает. Тот, кто работал в иностранной компании меня поймет. Есть Система. Она разработана для многих проектов. Я веду несколько длоков нашего русского проекта. По моим блоков есть ряд запросов, которые я должен выполнить на базе Системы. Если я обращаюсь к старшим товарищам за океан с просьбой что-то доделать или пояснить, то они мне вежливо объясняют, что мы тут русские идиоты, ничего не понимаем, что сами хотим, что у нас шаловливые ручки и т.п. А задачу, которая конкретно поставлена в проекте, надо делать мне и я за нее отвечаю премией. Поэтому сомое приемлимое в моем случае - найти способ использовать те системные ресурсы, что есть, для достижения того, что надо.... Вот так и живу. Спасибо, что помогаешь мне! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 18:18 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441они мне вежливо объясняют, что мы тут русские идиоты, ничего не понимаем, что сами хотим, что у нас шаловливые ручки и т.п. Это явно свидетельствует, что ты не сумел правильно задать вопрос, вляпался в ситуацию XYZ и действительно не понимаешь что и зачем от тебя требуют. Обращения должны быть конкретны и недвусмысленны. Например, предоставить документ с описанием всех таблиц в БД и информации хранящейся в их полях. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 18:31 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Замена fullCombin на физическую таблицу ничего не дает. Begimot441 Вот окончание запроса, которое я отрезал Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Далее эти 59х24 строки поступают на вход Системы, которая уже их обрабатывает нужным образом. Это "окончание запроса" должно быть не в конце запроса. Ибо результат "correctHours" - всего 4 записи в которых есть информация, а после соединения с "fullCombin" образуется 1416 записей, из которых только те 4 имеют смысловую нагрузку и те поля которые используются в том окончании запроса. Огромный вопрос - зачем присоединять типа справочник, причем непонятно чего, что бы чего-то там дальше что-то обрабатывало? Зачем эта информация без смысла, в дальнейшей обработке? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:07 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
В результате Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
получается некий набор данных, не имеющий первичного ключа. А потом мы его джойним с Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
по полю, не являщимся первичным ключом. Физический смысл этого действа? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:14 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 Для каждого из 59 единиц оборудования нужно 24 строки. В какой таблице список этих единиц? Какой первичный ключ? Каким образом таблица RECORDS ссылается на единицу оборудования? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:20 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Begimot441Вот окончание запроса, которое я отрезал Вот поэтому-то и надо с данным вопросом идти не на форум, а к старшим товарищам, которые знают конкретную базу конкретной системы. Похоже что все старшие товарищи сидят где-то в америках/индиях/итп, а мы общаемся с самым старшим из тех что есть тут. При этом этот старший может быть вообще, менеджером по продажам :) Знаком с подобными ситуациями :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:35 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 Далее эти 59х24 строки поступают на вход Системы, которая уже их обрабатывает нужным образом. Что такое Система, есть ли там документированное API? Или это так же творчество каких-то местных товарищей? Ну или не местных. Короче, не авторов системы. Типа мы тут вяжем веники, но попалась какая-то оглобля которая весь веник ломает. Как эту оглоблю правильно привязать? IMHO проблема кроется несколько выше чем вы пытаетесь ее решить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:38 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Что такое задачи (task)? Зачем рассматриваем все таски, почему не отсеиваем закрытые? Почему думаем что максимальный RECORDS.ID имеет отнощение к ремонту? Почему думаем что max(RECODS.Ts2) имеет отношение к max(RECODS.Id)? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:45 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Что такое RECORDS.status? Почему он не коррелирует с RECORDS.Description? DATEADD(hour, 5, - это смещение на местный часовой пояс, система пишет дату-время в GMT? Абстрактно. В таких запросах нехорошо писать Код: plsql 1. 2.
лучше писать все поля полностью, это дает возможность нормально проследить/(прогрепать) откуда оно взялось. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 19:50 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
У меня тут получилось радикально ускорить последний джойн Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
но тут я натолкнулся на ограничение Firebird - максимум 255 конекстов в одном запросе. т.е. делать псевдотаблицы через UNION ALL чревато еще и этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 20:31 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Скрипт реализации таблицы fullCombin в виде физической таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 20:43 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Оптимизированный запрос, с использованием физической fullCombin Использовать псевдотаблицы в данном случае не получится, наткнемся на ошибку
Код: 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. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292.
План, время выполнения. Код: 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.
Фишка ускорения - мы не делаем полного джойна. Сначала тянем записи с данными + джойн справочника. Это быстро. Потом через UNION ALL тянем весь справочник, без данных. Зная что записей данными у нас только по одной, делаем group by по полям справочника (= первичный ключ справочника, если бы он был) а по полям с данными можно делать хоть что, к примеру max() - там покажет либо NULL где были только записи из справочника, либо некие данные если по этим полям ПК справочника были записи не только справочника. Выполняется за 46ms. Сравнить выдаваемые результаты мне не с чем - исходный запрос у меня уходит в бесконечность. В любом случае - это неправильный путь решения задачи. Нужно делать по другому. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 20:56 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Скрипты таблиц + данные для тестирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2021, 21:09 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторОгромный вопрос - зачем присоединять типа справочник, причем непонятно чего, что бы чего-то там дальше что-то обрабатывало? Справичник оборудования (59 строк) и часов (24 строки) несут в себе коды. По этим кодам БД-приемник (куда я все это в итоге направляю) помещает данные по нужным тегам. (Это специализированная БД, менять я там ничего не могу) авторЗачем эта информация без смысла, в дальнейшей обработке? Если вопрос в том, зачем столько информации, в которой нули, то они нужны. Они ставят нули там, где вчера были единички. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 04:49 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторФизический смысл этого действа? Смысл в том, что сначала я подготовил полную таблицу, где на на каждое из 59 единиц оборудование заводится 24 часа (59х24). Это как бы вся развертка. Затем я присоединяю к ней полезную информацию, чтобы указать в какой час завтрашних будет ремонт, а в какой нет. Для этого я рассматриваю варианты: 1. Завтра ремонт целые сутки, тогда все 24 часа ставлю маркер 1; 2. Завтра, например в 9 утра, начало ремонта. Тогда я помечаю маркером все часы начиная с 9 до конца суток; 3. Завтра, например в 13 дня, завершение ремонта. Тогда я, соответственно с первого часа да 13 ставлю маркер; 4. Завтра, например, короткий ремонт с 10 до 18. Тогда маркеры с 10 до 18, остальные нули. Плюс еще особенность, что сутки начинаются с 2 часов. Завод в Сибири, а отчитывается по времени Москвы. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 04:59 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторПохоже что все старшие товарищи сидят где-то в америках/индиях/итп, а мы общаемся с самым старшим из тех что есть тут. При этом этот старший может быть вообще, менеджером по продажам :) Знаком с подобными ситуациями :) Я не настолько умен, чтобы быть менеджером по продажам.)) Я уже сказал, кто я. Я технический руководитель нескольких блоков. Вы сразу поняли, что я не настоящий программист и не лютый спец по SQL. Это верно. Я специалист по автоматизации технологического оборудования, а подобные вещи, как SQL-запросы, вынужден применять. Прекрасно понимаю, что мне не хватает знаний в этом направлении. Поэтому у вас и учусь. И вы мне в этом здорово помогаете, за что спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 05:07 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторВ какой таблице список этих единиц? Оборудование перечислено в теблице FOLDERS . Но там оно не все. Если по оборудованию еще не было отключений, оно туда еще и не попало. С другой стороны, полный перечень оборудования в моей псевдотаблице baseObjeclList . В ней я указываю codeAdd - это прибавка для формирования кода оборудования для целевой записи. авторКакой первичный ключ? Первичный ключ в таблице FOLDERS - видимо UID . Тут я плохо разбираюсь, а тебе я направлял DDL. Проверь сам, пож-та авторКаким образом таблица RECORDS ссылается на единицу оборудования? Посредством поля FOLDERID ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 07:36 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Есть еще какие-то конкретные вопросы? Заставлять тебя разбираться в твоей системе, кучей наводящих вопросов, уже что-то надоело. Просто читать лекции - как бы не мне оно надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 09:17 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторЧто такое задачи (task)? Зачем рассматриваем все таски, почему не отсеиваем закрытые? TaskId - это идентификатор группы записей. Когда событие корректируется, то прибавляется новая запись с новыми данными, но с тем же TaskId. Я уже сам понял, что я не отсеивал устаревшие данные. А устаревшие данные - это те, у которых время окончания события раньше, чем текущее время запроса. Это можно добавить в начало. Я у себя добавил, время запроса уменьшилось с 20 сек до 13 сек. авторПочему думаем что максимальный RECORDS.ID имеет отнощение к ремонту? Почему думаем что max(RECODS.Ts2) имеет отношение к max(RECODS.Id)? Это у меня осталось в виде мусора, сорри. Это можно удалить. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 09:19 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторЕсть еще какие-то конкретные вопросы? Если ДЛЯ ДАННОЙ КОНКРЕТНОЙ КОНФИГУРАЦИИ более рекомендаций не дашь, то огромное тебе спасибо! 13 сек - это вполне приемлимо в моем случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 09:23 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 Если ДЛЯ ДАННОЙ КОНКРЕТНОЙ КОНФИГУРАЦИИ более рекомендаций не дашь Покажи текущий вариант запроса, что у тебя получился. Желательно без купюр. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 10:15 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Результаты этого запроса в следующую систему каким образом попадают? Через файл xls или иным способом? Что там с вопросами на счет допустимости каментов в запросе? Как пробовал, что значит "с комментариями не работает"? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 10:21 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
fraks, авторРезультаты этого запроса в следующую систему каким образом попадают? Через файл xls или иным способом? В Системе есть возможность подключаться к ODBC-коннектам и вставлять в Систему SQL-запросы. Этот запрос ты и оптимизируешь. Расшифровка результатов запроса происходит по внутреннему механизму по тем покам, которые я там в запросе присваиваю. авторЧто там с вопросами на счет допустимости каментов в запросе? Как пробовал, что значит "с комментариями не работает"? Я пробовал заводить запросы с комментариями. С комментариями они не функционируб\ют. Не помню, какая ошибка при этом в логе. С корректным определением ошибки в логах у нас тоже не айс. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 10:48 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441Оборудование перечислено в теблице *FOLDERS*. Но там оно не все. Если по оборудованию еще не было отключений, оно туда еще и не попало. Значит должна быть ещё одна таблица из которой оборудование и попадается в таблицу FOLDERS. Поэтому, как я и сказал, надо просить полное описание всех таблиц и полей данной базы у специалистов по ней. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2021, 14:02 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 fraks, авторОгромный вопрос - зачем присоединять типа справочник, причем непонятно чего, что бы чего-то там дальше что-то обрабатывало? Справичник оборудования (59 строк) и часов (24 строки) несут в себе коды. По этим кодам БД-приемник (куда я все это в итоге направляю) помещает данные по нужным тегам. (Это специализированная БД, менять я там ничего не могу) авторЗачем эта информация без смысла, в дальнейшей обработке? Если вопрос в том, зачем столько информации, в которой нули, то они нужны. Они ставят нули там, где вчера были единички. Если нули нужны только для того что бы занулять некое табло, то можно просто разделить эти две манипуляциии. 1. Получаем простыню 59*24 с одними нулями - зачищаем прошлые результаты. Т.к это константа, можно вообще не из базы ее брать, не знаю как там у вас построено... 2. Получаем твой запрос без привязки к простыне - и заполняем только имеющиеся данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 07:02 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Begimot441 авторЧто там с вопросами на счет допустимости каментов в запросе? Как пробовал, что значит "с комментариями не работает"? Я пробовал заводить запросы с комментариями. С комментариями они не функционируб\ют. Не помню, какая ошибка при этом в логе. С корректным определением ошибки в логах у нас тоже не айс. Вангую следующее. Ты попробовал вместо комментария сделать псевдотаблицу, и нигде ее не использовать. Тот сервер который у тебя (2.5.6) на такое ругается. ДокументацияДо Firebird 2.5.8 если CTE объявлен, то он должен быть обязательно использован, в противном случае возникает ошибка "CTE <cte> is not used in query". Начиная с Firebird 2.5.8 вместо ошибки выдаётся предупреждение; Поэтому ты использовал этот target в следующем джойне, без всякого смысла, только что бы заткнуть ошибку. Это у тебя отложилось как "нельзя писать комментарии", хотя наверняка можно. В Firebird комментарии могут быть двух синтаксисов: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 07:16 |
|
Прошу совет по оптимизации запроса
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Мне думается что можно сделать так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Либо вообще не ставить условия. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Если же ограничение таки нужно - то его надо ставить ДО обработки данных а не при джойне результатов к справочнику. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2021, 07:41 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1559857]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
29ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 162ms |
0 / 0 |