|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Всем доброго времени суток! Может мой вопрос и несколько глупый но все же... Имеется таблица с тремя столбцами: число, дата, текст. Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 11:38 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Значения NULL не хранятся и не индексируются. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 11:41 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
То есть таблица с NULLами в одном из полей будет физически весить меньше чем та же таблица с заполненным полем во всех записях? Я правильно понял? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 11:44 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Vadim_MaximovЗначения NULL не хранятся и не индексируются.В общем случае неверно ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 11:44 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
m1rag3Всем доброго времени суток! Может мой вопрос и несколько глупый но все же... Имеется таблица с тремя столбцами: число, дата, текст. Пусть в ней 10 записей. Вопрос мой в том, резервируется ли место (физически на диске в файле БД) в записи под то поле, которое является пустым. Иными словами, будет ли эта таблица занимать одинаковое место на диске, если во всех десяти записях одно из полей будет NULL, а в другом случае заполнено. Указанная таблица из 10ти строк :o) скорее всего будет занимать одинаковое дисковое пространство, поскольку пространство выделяется блоками фиксированной длинны (точнее экстентами блоков). В пределах блока записи имеют разный размер, в зависимости от фактических значений полей, поэтому в блок может поместиться разное число записей. Касательно NULL. Если пустое поле последнее в списке колонок таблицы, или все следующие за пустым полем поля тоже пустые, то эти поля места вообще не занимают. Например в записи (V1, NULL, V2, NULL, NULL, NULL) последние три пустых поля места не занимают. Если за пустыми полями есть непустое, то каждое пустое поле занимает 1 байт. Например в записи (V1, NULL, NULL, NULL, V2, NULL) первые три NULL занимают по одному байту. Последний NULL места не занимает. Такой подход позволяет добавлять в таблицу пустые колонки практически мгновенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 12:01 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 12:06 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Vadim_MaximovЗначения NULL не хранятся и не индексируются. например bitmap... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2005, 13:40 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров Vadim_MaximovЗначения NULL не хранятся и не индексируются.В общем случае неверно ;-)Знаю. Согласен. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2005, 02:13 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Подниму тему, имеется таблица от разработчика порядка 600 столбцов, 500 гиг. Данные разные из разных отчетов, документов и т.д. Соответственно запрос с разбиением по типам данных выглядит так Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Красное - нед данных, то есть 90% таблицы откровенно пустые, причем есть отчеты за текущий месяц в 90 миллионов строк, у которых последний столбец находится на 430 месте, а всего занятых столбцов 41. До 430 идут порядка 390 пустых столбцов. В связи с этим возникает ряд вопросов. Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными? Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки? В физическом смысле при движении заполненных столбцов ближе к первому (в тех скриптах, что предлагает редактор) вижу таблица пересоздается в табличном пространстве по умолчанию, то есть места мне для еще одной таблицы даже временно просто не хватит. Что будет в это время с UNDO, если таблица порядка 500Гб? Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)? ПС. Еще есть вероятность, что в этом отчете на 90 миллионов прочистят пустые строки, но остальное то останется. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 07:48 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
nata44845Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными? Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?RTFM Nulls (FAQ) nata44845Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:23 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
nata44845Если в последнем столбце есть хоть одна заполненная ячейка данных все все столбцы до этого считаются заполненными? Или если заполнена ячейка в строке только эта строка доходит до этой ячейки, а все остальные строки записываются каждая до своей последней заполненной ячейки?С таким количеством столбцов уже вступает в дело intra-block chaining Каждая строка разбивается на куски не более 255 столбцов Там теоретически все также -- если заполнен последним (не NULL) столбец 40 -- все остальное не хранится, все столбцы до 40 содержащие NULL занимают 1 байт Если заполнены столбец 40, 300 и 380, то тут первый кусок аналогично предыдущему, а вот остальные -- в зависимости от порядка заполнения -- если первым заполнен столбец 380, то создастся кусок, содержащий (380-256) NULL по одному байту и значение столбца 380. Если потом обновляем столбец 300 -- он будет обновлен в этом куске. А если первым обновлен столбец 300 -- будет создан второй кусок с (300-256) NULL и значением столбца 300. При обновлении столбца 380 будет создан новый кусок с (380-301) NULL по одному байту и значением столбца 380. Обсуждалось уже давно, начиная с Chained rows в вторичных таблицах пространственных индексов и далее Возможно, там и/или тут неточности nata44845В физическом смысле при движении заполненных столбцов ближе к первому (в тех скриптах, что предлагает редактор) вижу таблица пересоздается в табличном пространстве по умолчанию, то есть места мне для еще одной таблицы даже временно просто не хватит. Что будет в это время с UNDO, если таблица порядка 500Гб? Можно ли как-то просчитать не среднюю длину строк, а конкретные длины для каждой строки каждого класса и количество таких строк (это в случае, что все длины строк разные)? ПС. Еще есть вероятность, что в этом отчете на 90 миллионов прочистят пустые строки, но остальное то останется.Тут я не совсем понял терминологию, но да -- реорганизация такой большой таблицы дело весьма ресурсоемкой. Но я бы все-таки разбил на 3 таблицы с 1:1 связью и сверху бы повесил VIEW (INSTEAD OF триггер на обновления) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:26 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, По столбцам все равно не поняла. К примеру есть столбец, в нем половина null половина заполнена. Он занимает полный размер по всем строкам, или в тех строках где есть данные длина равна длине столбца, а там где null 1 байт? И соответственно как ведут себя в этом случае все предыдущие столбцы? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:31 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав ЛюбомудровЕсли заполнены столбец 40, 300 и 380, то тут первый кусок аналогично предыдущему, а вот остальные -- в зависимости от порядка заполнения -- если первым заполнен столбец 380, то создастся кусок, содержащий (380-256) NULL по одному байту и значение столбца 380. Если потом обновляем столбец 300 -- он будет обновлен в этом куске. А если первым обновлен столбец 300 -- будет создан второй кусок с (300-256) NULL и значением столбца 300. При обновлении столбца 380 будет создан новый кусок с (380-301) NULL по одному байту и значением столбца 380.Вот тут, кстати, скорее всего неточность -- просто в заголовке [под]строки указывается номер первого столбца Хотя, вроде как Chained rows в вторичных таблицах пространственных индексов намекает на это. Насколько помню, так это ничем и не кончилось -- серьезных тестов с дампами и т.д. никто так и не проводил (да никому и не надо), ну или не опубликовал ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:32 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
nata44845Вячеслав Любомудров, По столбцам все равно не поняла. К примеру есть столбец, в нем половина null половина заполнена. Он занимает полный размер по всем строкам, или в тех строках где есть данные длина равна длине столбца, а там где null 1 байт? И соответственно как ведут себя в этом случае все предыдущие столбцы?Ну у нас же не поколоночное хранение Каждая строка ничего не знает об остальных ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:33 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, Ндаа, с вьюшкой у нас проблема как и у них, "самонастраиваемое приложение". ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:33 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Elic, Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:36 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, Тут как вариант только вынести часть данных те же отчеты в отдельную таблицу. И попросить больше так не делать... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:37 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
nata44845Это я тоже условно поняла, что надо отбросить последние нули, но как это сделать запросом пока не продумала.Я ж почти готовое выражение дал как способ его генерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2017, 08:43 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Вячеслав Любомудров, Row pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 14:56 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
xtenderRow pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 15:18 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
Саян, я сам это не проверял, просто дал ссылки, где это обсуждалось Но там были интересные моменты, но вот комментировать их я не берусь В любом случае, проблемы девушки -- другого способа я не вижу ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 15:40 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
ElicХммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак. Или (как вариант) физически ещё один столбец будет добавлен к 1-99 (который станет 1-99,356). SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 17:56 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
ElicxtenderRow pieces разбиваются с последнего поля,а не с первого. Т.е. если 355 столбцов то будут два: 100-355 и 1-99Хммм. Звучит так, что если добавить ещё один столбец, то либо появится третий кусок, либо произойдёт нехилый бессмысленный update. Верится не то что с трудом, а вообще никак.да, появится третий кусок, только уже "уехавший" в другой блок test1 Код: 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.
дамп к тесту1 Код: 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. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 21:14 |
|
Хранение пустых полей
|
|||
---|---|---|---|
#18+
тест2 Код: 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.
дамп к тесту2 Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2017, 21:16 |
|
|
start [/forum/topic.php?fid=52&msg=39401998&tid=1881909]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
71ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 290ms |
total: | 466ms |
0 / 0 |