|
Не вычислять зачение set=... для update с случае, если этого делать не надо по условию
|
|||
---|---|---|---|
#18+
Коллеги! Для каждого пользователя надо заполнить поле "впервые появился" в случае, если оно не заполнено. Пишу: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
В таблице hyper около 280 млн строк (timescaledb), соответственно, не очень хочется, чтобы поиск самого раннего значения производился в том случае, если поле firstpres уже заполнено. Однако, при выполнении запроса я вижу, что UPDATE 0 (то есть, в базу записи не было, всё правильно) и EXPLAIN ANALYZE показывает, что поиск по таблице hyper всё равно производится, несмотря на то, что условие where не выполняется. Можно ли как-то избежать этого, изменив запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 20:31 |
|
Не вычислять зачение set=... для update с случае, если этого делать не надо по условию
|
|||
---|---|---|---|
#18+
flashgun, Вы бы результаты explain analyze бы показали для начала... -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 21:13 |
|
Не вычислять зачение set=... для update с случае, если этого делать не надо по условию
|
|||
---|---|---|---|
#18+
Maxim Boguk, Ох, похоже вы правы: Код: plaintext 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.
Я правильно понимаю, что "(never executed)" для каждого узла как раз и означает, что планирование для этого запроса производилось, стоимость оценивалась, но вычислений, как таковых не было? Просто увидев такой вывод у explain, я почему-то решил, что все узлы выполнялись... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2020, 22:51 |
|
Не вычислять зачение set=... для update с случае, если этого делать не надо по условию
|
|||
---|---|---|---|
#18+
flashgun "(never executed)" для каждого узла как раз и означает, что планирование для этого запроса производилось, стоимость оценивалась, но вычислений, как таковых не было? Да, в текстовом формате так выводятся узлы с loops=0, то есть executor их не выполнял. Планировщик же не знает, увидит ли executor хоть одну строку для update, а потому должен предоставить план на случай если да, найдётся такая строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2020, 10:37 |
|
|
start [/forum/topic.php?fid=53&fpage=24&tid=1994535]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
39ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 139ms |
0 / 0 |