Comments 24
Получается отображать данные таблиц на сотни гигабайт с помощью постраничной загрузки с возможностью сортировки в базе данных.
А как вам это удалось? Ведь судя по джаваскрипту используется конструкция limit ... offset . Неужели работает? Или там одна строка занимает мегабайты? Но на скриншоте строки маленькие.
Интересно, узнать объём данных поточнее. Сколько там сотен гигабайт получилось? И сколько это строк. И на каком диске лежат данные?
Индексы, наверное, по всем колонкам, да?
А как вам это удалось?
За счет того что клиент забирает только необходимые данные из PostgreSQL базы, а не пытается загрузить весь датасет в память.
Ведь судя по джаваскрипту используется конструкция limit ... offset .
В простом случае да. Если хочется быстрее, то конечно надо переходить на ctid BETWEEN '($,0)'::tid AND '($,0)'::tid
Неужели работает?
Работает!
Интересно, узнать объём данных поточнее. Сколько там сотен гигабайт
получилось? И сколько это строк. И на каком диске лежат данные?
Диск NVME:
sudo smartctl -a /dev/nvme0
Model Number: Samsung SSD 970 EVO Plus 2TB
PCI Vendor/Subsystem ID: 0x144d
IEEE OUI Identifier: 0x002538
Total NVM Capacity: 2 000 398 934 016 [2,00 TB]
Общий объем базы данных 587GB. Число строк в самой большой таблице:
select count(*) from ways;
count
-----------
871619356
(1 row)
Распределение объема данных по партициям
Table | Rows | Total Size | Table Size | Index(es) Size | TOAST Size
------------------------+-------+--------------------+--------------------+------------------+--------------------
*** TOTAL *** | ~1B | 587 GB (100.00%) | 501 GB (100.00%) | 54 GB (100.00%) | 32 GB (100.00%)
| | | | |
ways_051 | ~21M | 12 GB (2.02%) | 11 GB (2.14%) | 1070 MB (1.94%) | 73 MB (0.22%)
relation_members | ~113M | 9523 MB (1.58%) | 6136 MB (1.20%) | 3386 MB (6.15%) | 8192 bytes (0.00%)
ways_043 | ~14M | 8102 MB (1.35%) | 7334 MB (1.43%) | 737 MB (1.34%) | 31 MB (0.09%)
ways_052 | ~14M | 8013 MB (1.33%) | 7200 MB (1.40%) | 729 MB (1.32%) | 84 MB (0.26%)
ways_002 | ~17M | 7923 MB (1.32%) | 7013 MB (1.37%) | 870 MB (1.58%) | 40 MB (0.12%)
ways_001 | ~15M | 7360 MB (1.22%) | 6485 MB (1.26%) | 788 MB (1.43%) | 87 MB (0.26%)
ways_081 | ~14M | 6963 MB (1.16%) | 6127 MB (1.19%) | 716 MB (1.30%) | 120 MB (0.37%)
ways_004 | ~13M | 6886 MB (1.15%) | 6108 MB (1.19%) | 691 MB (1.25%) | 87 MB (0.27%)
ways_029 | ~11M | 6824 MB (1.14%) | 6197 MB (1.21%) | 567 MB (1.03%) | 60 MB (0.18%)
ways_047 | ~11M | 6750 MB (1.12%) | 6101 MB (1.19%) | 577 MB (1.05%) | 71 MB (0.22%)
ways_093 | ~13M | 6522 MB (1.09%) | 5749 MB (1.12%) | 644 MB (1.17%) | 128 MB (0.39%)
ways_095 | ~13M | 6451 MB (1.07%) | 5689 MB (1.11%) | 671 MB (1.22%) | 91 MB (0.28%)
ways_090 | ~12M | 6405 MB (1.07%) | 5708 MB (1.11%) | 620 MB (1.13%) | 77 MB (0.23%)
ways_003 | ~12M | 6401 MB (1.07%) | 5553 MB (1.08%) | 641 MB (1.16%) | 206 MB (0.63%)
multipolygon_32767 | ~187k | 6366 MB (1.06%) | 338 MB (0.07%) | 27 MB (0.05%) | 6002 MB (18.32%)
ways_005 | ~12M | 6317 MB (1.05%) | 5590 MB (1.09%) | 601 MB (1.09%) | 126 MB (0.38%)
ways_092 | ~12M | 6227 MB (1.04%) | 5511 MB (1.07%) | 610 MB (1.11%) | 107 MB (0.33%)
ways_074 | ~11M | 6208 MB (1.03%) | 5507 MB (1.07%) | 587 MB (1.07%) | 114 MB (0.35%)
ways_091 | ~11M | 6158 MB (1.02%) | 5425 MB (1.06%) | 578 MB (1.05%) | 156 MB (0.47%)
ways_098 | ~12M | 6154 MB (1.02%) | 5421 MB (1.06%) | 595 MB (1.08%) | 138 MB (0.42%)
ways_089 | ~11M | 6128 MB (1.02%) | 5418 MB (1.06%) | 576 MB (1.05%) | 134 MB (0.41%)
ways_080 | ~11M | 5973 MB (0.99%) | 5206 MB (1.01%) | 549 MB (1.00%) | 217 MB (0.66%)
ways_097 | ~11M | 5940 MB (0.99%) | 5298 MB (1.03%) | 547 MB (0.99%) | 95 MB (0.29%)
ways_045 | ~11M | 5877 MB (0.98%) | 5261 MB (1.03%) | 546 MB (0.99%) | 70 MB (0.21%)
ways_053 | ~9M | 5810 MB (0.97%) | 5289 MB (1.03%) | 487 MB (0.88%) | 34 MB (0.10%)
ways_019 | ~10M | 5794 MB (0.96%) | 5124 MB (1.00%) | 517 MB (0.94%) | 153 MB (0.47%)
ways_006 | ~10M | 5774 MB (0.96%) | 5033 MB (0.98%) | 510 MB (0.93%) | 231 MB (0.70%)
ways_046 | ~10M | 5702 MB (0.95%) | 5094 MB (0.99%) | 505 MB (0.92%) | 103 MB (0.31%)
ways_042 | ~10M | 5683 MB (0.95%) | 5075 MB (0.99%) | 496 MB (0.90%) | 112 MB (0.34%)
ways_049 | ~9M | 5663 MB (0.94%) | 5118 MB (1.00%) | 456 MB (0.83%) | 89 MB (0.27%)
ways_037 | ~9M | 5634 MB (0.94%) | 5040 MB (0.98%) | 447 MB (0.81%) | 147 MB (0.45%)
ways_054 | ~9M | 5627 MB (0.94%) | 4856 MB (0.95%) | 485 MB (0.88%) | 286 MB (0.87%)
ways_017 | ~10M | 5605 MB (0.93%) | 4950 MB (0.97%) | 507 MB (0.92%) | 148 MB (0.45%)
ways_075 | ~9M | 5587 MB (0.93%) | 4940 MB (0.96%) | 488 MB (0.89%) | 159 MB (0.49%)
ways_026 | ~9M | 5585 MB (0.93%) | 5064 MB (0.99%) | 482 MB (0.88%) | 39 MB (0.12%)
ways_048 | ~9M | 5584 MB (0.93%) | 4985 MB (0.97%) | 484 MB (0.88%) | 114 MB (0.35%)
ways_082 | ~10M | 5548 MB (0.92%) | 4890 MB (0.95%) | 500 MB (0.91%) | 158 MB (0.48%)
ways_000 | ~9M | 5460 MB (0.91%) | 4750 MB (0.93%) | 461 MB (0.84%) | 248 MB (0.76%)
ways_094 | ~10M | 5457 MB (0.91%) | 4737 MB (0.92%) | 493 MB (0.89%) | 227 MB (0.69%)
ways_033 | ~8M | 5454 MB (0.91%) | 4808 MB (0.94%) | 403 MB (0.73%) | 243 MB (0.74%)
ways_087 | ~9M | 5445 MB (0.91%) | 4808 MB (0.94%) | 463 MB (0.84%) | 173 MB (0.53%)
ways_010 | ~9M | 5357 MB (0.89%) | 4774 MB (0.93%) | 440 MB (0.80%) | 143 MB (0.44%)
ways_040 | ~9M | 5348 MB (0.89%) | 4722 MB (0.92%) | 467 MB (0.85%) | 159 MB (0.48%)
ways_088 | ~9M | 5262 MB (0.88%) | 4662 MB (0.91%) | 455 MB (0.83%) | 145 MB (0.44%)
ways_060 | ~8M | 5243 MB (0.87%) | 4673 MB (0.91%) | 420 MB (0.76%) | 150 MB (0.46%)
ways_096 | ~10M | 5207 MB (0.87%) | 4613 MB (0.90%) | 495 MB (0.90%) | 99 MB (0.30%)
ways_024 | ~8M | 5205 MB (0.87%) | 4722 MB (0.92%) | 431 MB (0.78%) | 52 MB (0.16%)
ways_071 | ~9M | 5198 MB (0.87%) | 4625 MB (0.90%) | 469 MB (0.85%) | 104 MB (0.32%)
ways_038 | ~9M | 5193 MB (0.86%) | 4613 MB (0.90%) | 463 MB (0.84%) | 117 MB (0.36%)
ways_057 | ~8M | 5161 MB (0.86%) | 4619 MB (0.90%) | 415 MB (0.75%) | 126 MB (0.39%)
ways_070 | ~8M | 5124 MB (0.85%) | 4432 MB (0.86%) | 424 MB (0.77%) | 268 MB (0.82%)
ways_031 | ~8M | 5124 MB (0.85%) | 4618 MB (0.90%) | 435 MB (0.79%) | 71 MB (0.22%)
ways_013 | ~8M | 5098 MB (0.85%) | 4487 MB (0.87%) | 396 MB (0.72%) | 215 MB (0.66%)
ways_073 | ~9M | 5091 MB (0.85%) | 4529 MB (0.88%) | 479 MB (0.87%) | 84 MB (0.25%)
ways_079 | ~8M | 5088 MB (0.85%) | 4587 MB (0.89%) | 404 MB (0.73%) | 97 MB (0.30%)
ways_083 | ~8M | 5038 MB (0.84%) | 4389 MB (0.86%) | 402 MB (0.73%) | 247 MB (0.75%)
ways_044 | ~9M | 5029 MB (0.84%) | 4532 MB (0.88%) | 461 MB (0.84%) | 37 MB (0.11%)
ways_018 | ~8M | 5020 MB (0.84%) | 4390 MB (0.86%) | 415 MB (0.75%) | 214 MB (0.65%)
ways_021 | ~8M | 5003 MB (0.83%) | 4415 MB (0.86%) | 414 MB (0.75%) | 174 MB (0.53%)
ways_077 | ~8M | 4991 MB (0.83%) | 4451 MB (0.87%) | 416 MB (0.76%) | 124 MB (0.38%)
ways_067 | ~8M | 4990 MB (0.83%) | 4493 MB (0.88%) | 425 MB (0.77%) | 73 MB (0.22%)
ways_099 | ~9M | 4983 MB (0.83%) | 4446 MB (0.87%) | 475 MB (0.86%) | 62 MB (0.19%)
ways_009 | ~8M | 4935 MB (0.82%) | 4265 MB (0.83%) | 390 MB (0.71%) | 279 MB (0.85%)
ways_055 | ~7M | 4933 MB (0.82%) | 4363 MB (0.85%) | 380 MB (0.69%) | 190 MB (0.58%)
ways_028 | ~9M | 4915 MB (0.82%) | 4424 MB (0.86%) | 445 MB (0.81%) | 45 MB (0.14%)
ways_069 | ~7M | 4913 MB (0.82%) | 4294 MB (0.84%) | 378 MB (0.69%) | 240 MB (0.73%)
ways_086 | ~8M | 4900 MB (0.82%) | 4390 MB (0.86%) | 393 MB (0.71%) | 118 MB (0.36%)
ways_007 | ~7M | 4889 MB (0.81%) | 4282 MB (0.83%) | 375 MB (0.68%) | 232 MB (0.71%)
ways_015 | ~7M | 4847 MB (0.81%) | 4167 MB (0.81%) | 354 MB (0.64%) | 325 MB (0.99%)
ways_041 | ~8M | 4836 MB (0.80%) | 4237 MB (0.83%) | 392 MB (0.71%) | 207 MB (0.63%)
ways_066 | ~7M | 4832 MB (0.80%) | 4335 MB (0.85%) | 376 MB (0.68%) | 121 MB (0.37%)
ways_084 | ~8M | 4823 MB (0.80%) | 4227 MB (0.82%) | 411 MB (0.75%) | 185 MB (0.56%)
ways_056 | ~7M | 4819 MB (0.80%) | 4346 MB (0.85%) | 379 MB (0.69%) | 94 MB (0.29%)
ways_064 | ~8M | 4764 MB (0.79%) | 4314 MB (0.84%) | 404 MB (0.73%) | 46 MB (0.14%)
ways_035 | ~8M | 4709 MB (0.78%) | 4244 MB (0.83%) | 421 MB (0.76%) | 44 MB (0.13%)
ways_011 | ~7M | 4703 MB (0.78%) | 3954 MB (0.77%) | 348 MB (0.63%) | 402 MB (1.23%)
ways_078 | ~7M | 4687 MB (0.78%) | 4232 MB (0.82%) | 377 MB (0.68%) | 79 MB (0.24%)
ways_062 | ~7M | 4670 MB (0.78%) | 4291 MB (0.84%) | 358 MB (0.65%) | 21 MB (0.06%)
ways_050 | ~8M | 4660 MB (0.78%) | 4093 MB (0.80%) | 388 MB (0.70%) | 179 MB (0.55%)
ways_008 | ~6M | 4553 MB (0.76%) | 3826 MB (0.75%) | 311 MB (0.56%) | 416 MB (1.27%)
ways_058 | ~6M | 4518 MB (0.75%) | 3921 MB (0.76%) | 321 MB (0.58%) | 276 MB (0.84%)
ways_085 | ~7M | 4515 MB (0.75%) | 4018 MB (0.78%) | 368 MB (0.67%) | 129 MB (0.39%)
ways_072 | ~8M | 4493 MB (0.75%) | 3981 MB (0.78%) | 419 MB (0.76%) | 94 MB (0.29%)
ways_076 | ~7M | 4490 MB (0.75%) | 3956 MB (0.77%) | 365 MB (0.66%) | 170 MB (0.52%)
ways_020 | ~6M | 4452 MB (0.74%) | 3779 MB (0.74%) | 290 MB (0.53%) | 383 MB (1.17%)
ways_059 | ~6M | 4363 MB (0.73%) | 3846 MB (0.75%) | 318 MB (0.58%) | 199 MB (0.61%)
ways_036 | ~8M | 4360 MB (0.73%) | 3909 MB (0.76%) | 398 MB (0.72%) | 52 MB (0.16%)
ways_016 | ~6M | 4333 MB (0.72%) | 3647 MB (0.71%) | 292 MB (0.53%) | 394 MB (1.20%)
ways_32767 | ~2M | 4321 MB (0.72%) | 2618 MB (0.51%) | 89 MB (0.16%) | 1615 MB (4.93%)
ways_068 | ~6M | 4075 MB (0.68%) | 3566 MB (0.70%) | 296 MB (0.54%) | 214 MB (0.65%)
ways_025 | ~7M | 4062 MB (0.68%) | 3620 MB (0.71%) | 362 MB (0.66%) | 81 MB (0.25%)
ways_039 | ~7M | 4042 MB (0.67%) | 3581 MB (0.70%) | 354 MB (0.64%) | 107 MB (0.33%)
ways_012 | ~5M | 3962 MB (0.66%) | 3418 MB (0.67%) | 244 MB (0.44%) | 301 MB (0.92%)
ways_065 | ~6M | 3928 MB (0.65%) | 3481 MB (0.68%) | 317 MB (0.57%) | 130 MB (0.40%)
ways_023 | ~6M | 3773 MB (0.63%) | 3429 MB (0.67%) | 315 MB (0.57%) | 29 MB (0.09%)
ways_014 | ~4M | 3411 MB (0.57%) | 3009 MB (0.59%) | 230 MB (0.42%) | 172 MB (0.53%)
ways_061 | ~4M | 2920 MB (0.49%) | 2602 MB (0.51%) | 225 MB (0.41%) | 93 MB (0.28%)
osm_file_block_content | ~32M | 2834 MB (0.47%) | 2834 MB (0.55%) | 0 bytes (0.00%) |
ways_030 | ~4M | 2378 MB (0.40%) | 2108 MB (0.41%) | 190 MB (0.34%) | 81 MB (0.25%)
ways_022 | ~3M | 1986 MB (0.33%) | 1787 MB (0.35%) | 159 MB (0.29%) | 40 MB (0.12%)
nodes_029 | ~8M | 1959 MB (0.33%) | 1725 MB (0.34%) | 234 MB (0.42%) | 64 kB (0.00%)
ways_027 | ~3M | 1863 MB (0.31%) | 1676 MB (0.33%) | 170 MB (0.31%) | 18 MB (0.06%)
ways_063 | ~3M | 1782 MB (0.30%) | 1593 MB (0.31%) | 135 MB (0.25%) | 53 MB (0.16%)
relations | ~10M | 1480 MB (0.25%) | 1477 MB (0.29%) | 0 bytes (0.00%) | 3360 kB (0.01%)
nodes_082 | ~4M | 1459 MB (0.24%) | 1342 MB (0.26%) | 117 MB (0.21%) | 88 kB (0.00%)
ways_034 | ~3M | 1399 MB (0.23%) | 1247 MB (0.24%) | 130 MB (0.24%) | 22 MB (0.07%)
ways_032 | ~2M | 1273 MB (0.21%) | 1109 MB (0.22%) | 106 MB (0.19%) | 57 MB (0.18%)
nodes_051 | ~6M | 1174 MB (0.20%) | 1007 MB (0.20%) | 166 MB (0.30%) | 168 kB (0.00%)
nodes_011 | ~5M | 1105 MB (0.18%) | 946 MB (0.18%) | 158 MB (0.29%) | 96 kB (0.00%)
nodes_045 | ~4M | 986 MB (0.16%) | 874 MB (0.17%) | 112 MB (0.20%) | 88 kB (0.00%)
nodes_069 | ~4M | 957 MB (0.16%) | 829 MB (0.16%) | 128 MB (0.23%) | 8192 bytes (0.00%)
multipolygon_012 | ~292k | 914 MB (0.15%) | 385 MB (0.08%) | 43 MB (0.08%) | 486 MB (1.48%)
nodes_043 | ~4M | 831 MB (0.14%) | 710 MB (0.14%) | 120 MB (0.22%) | 56 kB (0.00%)
nodes_037 | ~4M | 821 MB (0.14%) | 712 MB (0.14%) | 109 MB (0.20%) | 56 kB (0.00%)
nodes_042 | ~4M | 800 MB (0.13%) | 694 MB (0.14%) | 106 MB (0.19%) | 64 kB (0.00%)
nodes_047 | ~4M | 753 MB (0.13%) | 633 MB (0.12%) | 120 MB (0.22%) | 56 kB (0.00%)
nodes_064 | ~3M | 739 MB (0.12%) | 637 MB (0.12%) | 102 MB (0.18%) | 8192 bytes (0.00%)
nodes_089 | ~3M | 721 MB (0.12%) | 634 MB (0.12%) | 87 MB (0.16%) | 200 kB (0.00%)
multipolygon_014 | ~226k | 714 MB (0.12%) | 301 MB (0.06%) | 33 MB (0.06%) | 380 MB (1.16%)
nodes_053 | ~4M | 701 MB (0.12%) | 595 MB (0.12%) | 106 MB (0.19%) | 56 kB (0.00%)
nodes_040 | ~4M | 700 MB (0.12%) | 590 MB (0.11%) | 110 MB (0.20%) | 64 kB (0.00%)
nodes_031 | ~3M | 675 MB (0.11%) | 585 MB (0.11%) | 90 MB (0.16%) | 72 kB (0.00%)
nodes_052 | ~3M | 665 MB (0.11%) | 561 MB (0.11%) | 105 MB (0.19%) | 56 kB (0.00%)
nodes_044 | ~3M | 634 MB (0.11%) | 539 MB (0.11%) | 94 MB (0.17%) | 24 kB (0.00%)
nodes_009 | ~3M | 609 MB (0.10%) | 505 MB (0.10%) | 104 MB (0.19%) | 104 kB (0.00%)
multipolygon_016 | ~127k | 600 MB (0.10%) | 196 MB (0.04%) | 18 MB (0.03%) | 386 MB (1.18%)
nodes_048 | ~3M | 595 MB (0.10%) | 500 MB (0.10%) | 94 MB (0.17%) | 8192 bytes (0.00%)
multipolygon_018 | ~265k | 578 MB (0.10%) | 304 MB (0.06%) | 39 MB (0.07%) | 235 MB (0.72%)
multipolygon_015 | ~206k | 576 MB (0.10%) | 254 MB (0.05%) | 30 MB (0.05%) | 293 MB (0.89%)
multipolygon_021 | ~123k | 568 MB (0.09%) | 227 MB (0.04%) | 20 MB (0.04%) | 321 MB (0.98%)
nodes_046 | ~3M | 563 MB (0.09%) | 479 MB (0.09%) | 84 MB (0.15%) | 64 kB (0.00%)
multipolygon_033 | ~154k | 540 MB (0.09%) | 274 MB (0.05%) | 24 MB (0.04%) | 242 MB (0.74%)
nodes_035 | ~2M | 532 MB (0.09%) | 458 MB (0.09%) | 74 MB (0.13%) | 56 kB (0.00%)
nodes_049 | ~3M | 524 MB (0.09%) | 442 MB (0.09%) | 82 MB (0.15%) | 56 kB (0.00%)
nodes_077 | ~3M | 519 MB (0.09%) | 432 MB (0.08%) | 87 MB (0.16%) | 56 kB (0.00%)
nodes_010 | ~3M | 513 MB (0.09%) | 421 MB (0.08%) | 91 MB (0.17%) | 88 kB (0.00%)
nodes_050 | ~3M | 468 MB (0.08%) | 388 MB (0.08%) | 80 MB (0.15%) | 8192 bytes (0.00%)
multipolygon_013 | ~142k | 466 MB (0.08%) | 203 MB (0.04%) | 21 MB (0.04%) | 242 MB (0.74%)
multipolygon_020 | ~60k | 465 MB (0.08%) | 122 MB (0.02%) | 8296 kB (0.01%) | 335 MB (1.02%)
multipolygon_037 | ~133k | 461 MB (0.08%) | 251 MB (0.05%) | 20 MB (0.04%) | 190 MB (0.58%)
nodes_067 | ~3M | 459 MB (0.08%) | 372 MB (0.07%) | 87 MB (0.16%) | 24 kB (0.00%)
nodes_055 | ~2M | 436 MB (0.07%) | 361 MB (0.07%) | 75 MB (0.14%) | 56 kB (0.00%)
nodes_076 | ~2M | 433 MB (0.07%) | 361 MB (0.07%) | 72 MB (0.13%) | 80 kB (0.00%)
nodes_060 | ~2M | 433 MB (0.07%) | 360 MB (0.07%) | 73 MB (0.13%) | 24 kB (0.00%)
nodes_026 | ~2M | 426 MB (0.07%) | 359 MB (0.07%) | 67 MB (0.12%) | 56 kB (0.00%)
nodes_078 | ~2M | 423 MB (0.07%) | 358 MB (0.07%) | 65 MB (0.12%) | 24 kB (0.00%)
nodes_036 | ~2M | 421 MB (0.07%) | 360 MB (0.07%) | 61 MB (0.11%) | 8192 bytes (0.00%)
nodes_024 | ~2M | 418 MB (0.07%) | 351 MB (0.07%) | 67 MB (0.12%) | 56 kB (0.00%)
multipolygon_019 | ~249k | 418 MB (0.07%) | 257 MB (0.05%) | 37 MB (0.07%) | 124 MB (0.38%)
nodes_028 | ~2M | 403 MB (0.07%) | 338 MB (0.07%) | 65 MB (0.12%) | 56 kB (0.00%)
nodes_068 | ~2M | 400 MB (0.07%) | 343 MB (0.07%) | 57 MB (0.10%) | 8192 bytes (0.00%)
nodes_066 | ~2M | 392 MB (0.07%) | 335 MB (0.07%) | 57 MB (0.10%) | 56 kB (0.00%)
multipolygon_011 | ~73k | 383 MB (0.06%) | 120 MB (0.02%) | 10 MB (0.02%) | 252 MB (0.77%)
nodes_075 | ~2M | 380 MB (0.06%) | 313 MB (0.06%) | 68 MB (0.12%) | 88 kB (0.00%)
nodes_062 | ~2M | 374 MB (0.06%) | 322 MB (0.06%) | 52 MB (0.09%) | 24 kB (0.00%)
nodes_088 | ~2M | 373 MB (0.06%) | 307 MB (0.06%) | 65 MB (0.12%) | 24 kB (0.00%)
nodes_015 | ~2M | 371 MB (0.06%) | 309 MB (0.06%) | 62 MB (0.11%) | 256 kB (0.00%)
nodes_021 | ~2M | 359 MB (0.06%) | 295 MB (0.06%) | 63 MB (0.12%) | 56 kB (0.00%)
multipolygon_069 | ~62k | 355 MB (0.06%) | 109 MB (0.02%) | 9608 kB (0.02%) | 237 MB (0.72%)
nodes_025 | ~2M | 351 MB (0.06%) | 291 MB (0.06%) | 60 MB (0.11%) | 64 kB (0.00%)
nodes_079 | ~2M | 345 MB (0.06%) | 291 MB (0.06%) | 54 MB (0.10%) | 24 kB (0.00%)
nodes_033 | ~2M | 341 MB (0.06%) | 286 MB (0.06%) | 55 MB (0.10%) | 64 kB (0.00%)
multipolygon_068 | ~50k | 341 MB (0.06%) | 90 MB (0.02%) | 7656 kB (0.01%) | 244 MB (0.74%)
nodes_038 | ~2M | 340 MB (0.06%) | 274 MB (0.05%) | 65 MB (0.12%) | 72 kB (0.00%)
nodes_087 | ~2M | 333 MB (0.06%) | 273 MB (0.05%) | 59 MB (0.11%) | 80 kB (0.00%)
nodes_013 | ~2M | 331 MB (0.06%) | 271 MB (0.05%) | 60 MB (0.11%) | 128 kB (0.00%)
multipolygon_070 | ~105k | 317 MB (0.05%) | 105 MB (0.02%) | 16 MB (0.03%) | 196 MB (0.60%)
nodes_000 | ~2M | 312 MB (0.05%) | 251 MB (0.05%) | 61 MB (0.11%) | 112 kB (0.00%)
multipolygon_077 | ~148k | 309 MB (0.05%) | 171 MB (0.03%) | 23 MB (0.04%) | 115 MB (0.35%)
nodes_023 | ~2M | 308 MB (0.05%) | 262 MB (0.05%) | 46 MB (0.08%) | 64 kB (0.00%)
nodes_019 | ~2M | 308 MB (0.05%) | 252 MB (0.05%) | 56 MB (0.10%) | 24 kB (0.00%)
nodes_007 | ~2M | 306 MB (0.05%) | 247 MB (0.05%) | 59 MB (0.11%) | 64 kB (0.00%)
nodes_041 | ~2M | 305 MB (0.05%) | 256 MB (0.05%) | 50 MB (0.09%) | 120 kB (0.00%)
nodes_086 | ~2M | 305 MB (0.05%) | 254 MB (0.05%) | 51 MB (0.09%) | 24 kB (0.00%)
nodes_085 | ~2M | 297 MB (0.05%) | 246 MB (0.05%) | 50 MB (0.09%) | 64 kB (0.00%)
nodes_014 | ~2M | 293 MB (0.05%) | 246 MB (0.05%) | 47 MB (0.09%) | 496 kB (0.00%)
multipolygon_008 | ~50k | 288 MB (0.05%) | 77 MB (0.02%) | 8032 kB (0.01%) | 204 MB (0.62%)
nodes_056 | ~2M | 286 MB (0.05%) | 234 MB (0.05%) | 52 MB (0.09%) | 24 kB (0.00%)
multipolygon_038 | ~156k | 286 MB (0.05%) | 173 MB (0.03%) | 24 MB (0.04%) | 89 MB (0.27%)
nodes_012 | ~2M | 286 MB (0.05%) | 232 MB (0.05%) | 52 MB (0.10%) | 736 kB (0.00%)
nodes_039 | ~1M | 275 MB (0.05%) | 230 MB (0.04%) | 45 MB (0.08%) | 72 kB (0.00%)
multipolygon_058 | ~46k | 274 MB (0.05%) | 83 MB (0.02%) | 6536 kB (0.01%) | 184 MB (0.56%)
nodes_083 | ~2M | 270 MB (0.05%) | 218 MB (0.04%) | 52 MB (0.10%) | 104 kB (0.00%)
nodes_018 | ~2M | 270 MB (0.04%) | 222 MB (0.04%) | 48 MB (0.09%) | 64 kB (0.00%)
nodes_084 | ~2M | 268 MB (0.04%) | 217 MB (0.04%) | 52 MB (0.09%) | 120 kB (0.00%)
multipolygon_045 | ~130k | 259 MB (0.04%) | 155 MB (0.03%) | 20 MB (0.04%) | 83 MB (0.25%)
multipolygon_050 | ~60k | 255 MB (0.04%) | 83 MB (0.02%) | 9736 kB (0.02%) | 163 MB (0.50%)
multipolygon_031 | ~84k | 246 MB (0.04%) | 129 MB (0.03%) | 14 MB (0.02%) | 103 MB (0.31%)
multipolygon_048 | ~58k | 245 MB (0.04%) | 91 MB (0.02%) | 9520 kB (0.02%) | 145 MB (0.44%)
multipolygon_017 | ~102k | 242 MB (0.04%) | 129 MB (0.03%) | 15 MB (0.03%) | 98 MB (0.30%)
multipolygon_040 | ~64k | 241 MB (0.04%) | 83 MB (0.02%) | 10200 kB (0.02%) | 148 MB (0.45%)
multipolygon_039 | ~117k | 241 MB (0.04%) | 122 MB (0.02%) | 18 MB (0.03%) | 101 MB (0.31%)
multipolygon_091 | ~43k | 237 MB (0.04%) | 67 MB (0.01%) | 6432 kB (0.01%) | 164 MB (0.50%)
multipolygon_097 | ~54k | 237 MB (0.04%) | 80 MB (0.02%) | 7976 kB (0.01%) | 149 MB (0.46%)
nodes_074 | ~1M | 236 MB (0.04%) | 197 MB (0.04%) | 39 MB (0.07%) | 64 kB (0.00%)
nodes_058 | ~1M | 235 MB (0.04%) | 198 MB (0.04%) | 37 MB (0.07%) | 64 kB (0.00%)
multipolygon_000 | ~51k | 234 MB (0.04%) | 79 MB (0.02%) | 7584 kB (0.01%) | 147 MB (0.45%)
nodes_057 | ~2M | 234 MB (0.04%) | 187 MB (0.04%) | 47 MB (0.08%) | 24 kB (0.00%)
multipolygon_054 | ~51k | 232 MB (0.04%) | 79 MB (0.02%) | 7760 kB (0.01%) | 146 MB (0.45%)
nodes_070 | ~1M | 229 MB (0.04%) | 187 MB (0.04%) | 42 MB (0.08%) | 120 kB (0.00%)
multipolygon_041 | ~36k | 229 MB (0.04%) | 63 MB (0.01%) | 5688 kB (0.01%) | 160 MB (0.49%)
multipolygon_071 | ~103k | 228 MB (0.04%) | 122 MB (0.02%) | 16 MB (0.03%) | 91 MB (0.28%)
multipolygon_046 | ~84k | 226 MB (0.04%) | 127 MB (0.02%) | 13 MB (0.02%) | 86 MB (0.26%)
multipolygon_047 | ~63k | 223 MB (0.04%) | 102 MB (0.02%) | 10152 kB (0.02%) | 112 MB (0.34%)
multipolygon_075 | ~62k | 218 MB (0.04%) | 90 MB (0.02%) | 9432 kB (0.02%) | 119 MB (0.36%)
nodes_071 | ~1M | 216 MB (0.04%) | 175 MB (0.03%) | 40 MB (0.07%) | 88 kB (0.00%)
nodes_054 | ~2M | 214 MB (0.04%) | 168 MB (0.03%) | 46 MB (0.08%) | 120 kB (0.00%)
multipolygon_042 | ~56k | 213 MB (0.04%) | 88 MB (0.02%) | 8960 kB (0.02%) | 116 MB (0.35%)
nodes_092 | ~1M | 209 MB (0.03%) | 170 MB (0.03%) | 40 MB (0.07%) | 64 kB (0.00%)
multipolygon_052 | ~57k | 207 MB (0.03%) | 87 MB (0.02%) | 9288 kB (0.02%) | 111 MB (0.34%)
nodes_020 | ~1M | 207 MB (0.03%) | 168 MB (0.03%) | 39 MB (0.07%) | 24 kB (0.00%)
nodes_073 | ~1M | 206 MB (0.03%) | 173 MB (0.03%) | 33 MB (0.06%) | 8192 bytes (0.00%)
multipolygon_007 | ~64k | 202 MB (0.03%) | 81 MB (0.02%) | 9720 kB (0.02%) | 111 MB (0.34%)
nodes_065 | ~1M | 202 MB (0.03%) | 171 MB (0.03%) | 31 MB (0.06%) | 24 kB (0.00%)
multipolygon_051 | ~68k | 202 MB (0.03%) | 106 MB (0.02%) | 11 MB (0.02%) | 85 MB (0.26%)
nodes_022 | ~987k | 201 MB (0.03%) | 171 MB (0.03%) | 30 MB (0.05%) | 24 kB (0.00%)
multipolygon_094 | ~32k | 201 MB (0.03%) | 46 MB (0.01%) | 4952 kB (0.01%) | 150 MB (0.46%)
nodes_017 | ~1M | 195 MB (0.03%) | 158 MB (0.03%) | 37 MB (0.07%) | 24 kB (0.00%)
nodes_094 | ~1M | 194 MB (0.03%) | 162 MB (0.03%) | 32 MB (0.06%) | 88 kB (0.00%)
multipolygon_005 | ~36k | 191 MB (0.03%) | 50 MB (0.01%) | 5496 kB (0.01%) | 135 MB (0.41%)
multipolygon_049 | ~33k | 190 MB (0.03%) | 56 MB (0.01%) | 5472 kB (0.01%) | 129 MB (0.39%)
nodes_091 | ~1M | 187 MB (0.03%) | 154 MB (0.03%) | 33 MB (0.06%) | 152 kB (0.00%)
multipolygon_059 | ~34k | 186 MB (0.03%) | 66 MB (0.01%) | 4904 kB (0.01%) | 115 MB (0.35%)
multipolygon_083 | ~34k | 186 MB (0.03%) | 55 MB (0.01%) | 4832 kB (0.01%) | 125 MB (0.38%)
nodes_061 | ~1M | 179 MB (0.03%) | 148 MB (0.03%) | 32 MB (0.06%) | 8192 bytes (0.00%)
multipolygon_009 | ~43k | 174 MB (0.03%) | 56 MB (0.01%) | 6440 kB (0.01%) | 112 MB (0.34%)
multipolygon_078 | ~28k | 169 MB (0.03%) | 56 MB (0.01%) | 4664 kB (0.01%) | 108 MB (0.33%)
nodes_059 | ~1M | 165 MB (0.03%) | 133 MB (0.03%) | 32 MB (0.06%) | 24 kB (0.00%)
multipolygon_085 | ~29k | 164 MB (0.03%) | 42 MB (0.01%) | 4400 kB (0.01%) | 117 MB (0.36%)
nodes_008 | ~1M | 163 MB (0.03%) | 130 MB (0.03%) | 33 MB (0.06%) | 56 kB (0.00%)
nodes_072 | ~842k | 162 MB (0.03%) | 136 MB (0.03%) | 25 MB (0.05%) | 64 kB (0.00%)
nodes_093 | ~956k | 158 MB (0.03%) | 130 MB (0.03%) | 29 MB (0.05%) | 104 kB (0.00%)
multipolygon_030 | ~43k | 158 MB (0.03%) | 74 MB (0.01%) | 6304 kB (0.01%) | 78 MB (0.24%)
multipolygon_076 | ~54k | 155 MB (0.03%) | 66 MB (0.01%) | 8576 kB (0.02%) | 81 MB (0.25%)
multipolygon_098 | ~49k | 150 MB (0.02%) | 56 MB (0.01%) | 7112 kB (0.01%) | 87 MB (0.27%)
multipolygon_055 | ~42k | 149 MB (0.02%) | 64 MB (0.01%) | 6552 kB (0.01%) | 79 MB (0.24%)
nodes_030 | ~884k | 149 MB (0.02%) | 122 MB (0.02%) | 27 MB (0.05%) | 56 kB (0.00%)
multipolygon_029 | ~54k | 148 MB (0.02%) | 84 MB (0.02%) | 8616 kB (0.02%) | 56 MB (0.17%)
multipolygon_010 | ~33k | 147 MB (0.02%) | 52 MB (0.01%) | 4928 kB (0.01%) | 90 MB (0.27%)
multipolygon_024 | ~23k | 146 MB (0.02%) | 33 MB (0.01%) | 3808 kB (0.01%) | 109 MB (0.33%)
multipolygon_084 | ~43k | 146 MB (0.02%) | 48 MB (0.01%) | 6240 kB (0.01%) | 92 MB (0.28%)
multipolygon_096 | ~25k | 145 MB (0.02%) | 41 MB (0.01%) | 3824 kB (0.01%) | 101 MB (0.31%)
nodes_016 | ~1M | 145 MB (0.02%) | 114 MB (0.02%) | 31 MB (0.06%) | 24 kB (0.00%)
multipolygon_044 | ~65k | 145 MB (0.02%) | 96 MB (0.02%) | 10 MB (0.02%) | 38 MB (0.12%)
multipolygon_028 | ~44k | 143 MB (0.02%) | 57 MB (0.01%) | 7024 kB (0.01%) | 79 MB (0.24%)
multipolygon_053 | ~44k | 140 MB (0.02%) | 65 MB (0.01%) | 7192 kB (0.01%) | 68 MB (0.21%)
multipolygon_023 | ~21k | 135 MB (0.02%) | 28 MB (0.01%) | 3720 kB (0.01%) | 103 MB (0.31%)
multipolygon_065 | ~30k | 133 MB (0.02%) | 50 MB (0.01%) | 4760 kB (0.01%) | 78 MB (0.24%)
nodes_027 | ~770k | 131 MB (0.02%) | 108 MB (0.02%) | 23 MB (0.04%) | 64 kB (0.00%)
multipolygon_025 | ~29k | 130 MB (0.02%) | 44 MB (0.01%) | 4784 kB (0.01%) | 82 MB (0.25%)
nodes_098 | ~763k | 129 MB (0.02%) | 106 MB (0.02%) | 23 MB (0.04%) | 112 kB (0.00%)
multipolygon_036 | ~30k | 128 MB (0.02%) | 67 MB (0.01%) | 4856 kB (0.01%) | 57 MB (0.17%)
multipolygon_043 | ~56k | 127 MB (0.02%) | 83 MB (0.02%) | 9184 kB (0.02%) | 35 MB (0.11%)
nodes_081 | ~855k | 124 MB (0.02%) | 99 MB (0.02%) | 26 MB (0.05%) | 56 kB (0.00%)
multipolygon_035 | ~37k | 124 MB (0.02%) | 73 MB (0.01%) | 6200 kB (0.01%) | 45 MB (0.14%)
multipolygon_006 | ~19k | 122 MB (0.02%) | 37 MB (0.01%) | 3016 kB (0.01%) | 82 MB (0.25%)
nodes_003 | ~653k | 121 MB (0.02%) | 101 MB (0.02%) | 20 MB (0.04%) | 64 kB (0.00%)
multipolygon_074 | ~26k | 115 MB (0.02%) | 33 MB (0.01%) | 4184 kB (0.01%) | 78 MB (0.24%)
multipolygon_087 | ~30k | 113 MB (0.02%) | 43 MB (0.01%) | 4672 kB (0.01%) | 66 MB (0.20%)
multipolygon_060 | ~37k | 113 MB (0.02%) | 50 MB (0.01%) | 5656 kB (0.01%) | 57 MB (0.17%)
multipolygon_099 | ~36k | 112 MB (0.02%) | 36 MB (0.01%) | 5784 kB (0.01%) | 70 MB (0.21%)
nodes_034 | ~638k | 112 MB (0.02%) | 92 MB (0.02%) | 19 MB (0.03%) | 56 kB (0.00%)
multipolygon_026 | ~34k | 111 MB (0.02%) | 48 MB (0.01%) | 5680 kB (0.01%) | 57 MB (0.17%)
multipolygon_079 | ~32k | 108 MB (0.02%) | 43 MB (0.01%) | 5360 kB (0.01%) | 60 MB (0.18%)
multipolygon_089 | ~39k | 106 MB (0.02%) | 48 MB (0.01%) | 5808 kB (0.01%) | 52 MB (0.16%)
nodes_006 | ~666k | 105 MB (0.02%) | 85 MB (0.02%) | 20 MB (0.04%) | 136 kB (0.00%)
multipolygon_092 | ~44k | 99 MB (0.02%) | 56 MB (0.01%) | 6800 kB (0.01%) | 36 MB (0.11%)
multipolygon_067 | ~23k | 99 MB (0.02%) | 40 MB (0.01%) | 3688 kB (0.01%) | 56 MB (0.17%)
multipolygon_032 | ~25k | 99 MB (0.02%) | 39 MB (0.01%) | 4256 kB (0.01%) | 56 MB (0.17%)
multipolygon_088 | ~20k | 97 MB (0.02%) | 29 MB (0.01%) | 3120 kB (0.01%) | 66 MB (0.20%)
nodes_095 | ~554k | 95 MB (0.02%) | 78 MB (0.02%) | 17 MB (0.03%) | 64 kB (0.00%)
multipolygon_066 | ~22k | 94 MB (0.02%) | 39 MB (0.01%) | 3424 kB (0.01%) | 51 MB (0.16%)
multipolygon_073 | ~18k | 93 MB (0.02%) | 23 MB (0.00%) | 2856 kB (0.01%) | 67 MB (0.20%)
multipolygon_082 | ~37k | 93 MB (0.02%) | 40 MB (0.01%) | 5832 kB (0.01%) | 47 MB (0.14%)
multipolygon_086 | ~21k | 92 MB (0.02%) | 32 MB (0.01%) | 3296 kB (0.01%) | 57 MB (0.17%)
nodes_080 | ~626k | 92 MB (0.02%) | 73 MB (0.01%) | 19 MB (0.03%) | 80 kB (0.00%)
multipolygon_072 | ~20k | 90 MB (0.02%) | 26 MB (0.00%) | 3272 kB (0.01%) | 61 MB (0.19%)
multipolygon_080 | ~18k | 88 MB (0.01%) | 37 MB (0.01%) | 2880 kB (0.01%) | 49 MB (0.15%)
nodes_063 | ~508k | 87 MB (0.01%) | 71 MB (0.01%) | 15 MB (0.03%) | 24 kB (0.00%)
nodes_099 | ~521k | 85 MB (0.01%) | 69 MB (0.01%) | 16 MB (0.03%) | 192 kB (0.00%)
nodes_032 | ~447k | 85 MB (0.01%) | 71 MB (0.01%) | 13 MB (0.02%) | 120 kB (0.00%)
nodes_001 | ~537k | 80 MB (0.01%) | 64 MB (0.01%) | 16 MB (0.03%) | 72 kB (0.00%)
nodes_097 | ~450k | 80 MB (0.01%) | 66 MB (0.01%) | 14 MB (0.02%) | 88 kB (0.00%)
multipolygon_034 | ~46k | 79 MB (0.01%) | 50 MB (0.01%) | 7440 kB (0.01%) | 22 MB (0.07%)
nodes_090 | ~502k | 77 MB (0.01%) | 62 MB (0.01%) | 15 MB (0.03%) | 72 kB (0.00%)
multipolygon_003 | ~18k | 77 MB (0.01%) | 25 MB (0.00%) | 2704 kB (0.00%) | 49 MB (0.15%)
nodes_096 | ~464k | 76 MB (0.01%) | 62 MB (0.01%) | 14 MB (0.03%) | 56 kB (0.00%)
multipolygon_061 | ~17k | 75 MB (0.01%) | 29 MB (0.01%) | 2712 kB (0.00%) | 43 MB (0.13%)
multipolygon_064 | ~22k | 71 MB (0.01%) | 36 MB (0.01%) | 3704 kB (0.01%) | 30 MB (0.09%)
multipolygon_027 | ~16k | 70 MB (0.01%) | 29 MB (0.01%) | 2704 kB (0.00%) | 39 MB (0.12%)
multipolygon_081 | ~45k | 68 MB (0.01%) | 37 MB (0.01%) | 6576 kB (0.01%) | 24 MB (0.07%)
multipolygon_093 | ~19k | 68 MB (0.01%) | 26 MB (0.00%) | 2848 kB (0.01%) | 39 MB (0.12%)
multipolygon_090 | ~19k | 65 MB (0.01%) | 23 MB (0.00%) | 2880 kB (0.01%) | 39 MB (0.12%)
multipolygon_022 | ~14k | 63 MB (0.01%) | 24 MB (0.00%) | 2272 kB (0.00%) | 37 MB (0.11%)
multipolygon_056 | ~21k | 63 MB (0.01%) | 34 MB (0.01%) | 3064 kB (0.01%) | 26 MB (0.08%)
multipolygon_057 | ~15k | 56 MB (0.01%) | 23 MB (0.00%) | 2384 kB (0.00%) | 30 MB (0.09%)
multipolygon_062 | ~40k | 53 MB (0.01%) | 41 MB (0.01%) | 6128 kB (0.01%) | 6216 kB (0.02%)
multipolygon_001 | ~19k | 48 MB (0.01%) | 23 MB (0.00%) | 3224 kB (0.01%) | 22 MB (0.07%)
multipolygon_095 | ~17k | 47 MB (0.01%) | 21 MB (0.00%) | 2552 kB (0.00%) | 24 MB (0.07%)
nodes_005 | ~310k | 47 MB (0.01%) | 37 MB (0.01%) | 9576 kB (0.02%) | 96 kB (0.00%)
multipolygon_004 | ~20k | 46 MB (0.01%) | 17 MB (0.00%) | 3080 kB (0.01%) | 25 MB (0.08%)
nodes_004 | ~191k | 38 MB (0.01%) | 32 MB (0.01%) | 5888 kB (0.01%) | 56 kB (0.00%)
nodes_002 | ~186k | 30 MB (0.01%) | 25 MB (0.00%) | 5736 kB (0.01%) | 8192 bytes (0.00%)
multipolygon_002 | ~9k | 23 MB (0.00%) | 13 MB (0.00%) | 1480 kB (0.00%) | 8760 kB (0.03%)
multipolygon_063 | ~5k | 21 MB (0.00%) | 9096 kB (0.00%) | 808 kB (0.00%) | 11 MB (0.03%)
h3_3_bounds_complex | ~41k | 17 MB (0.00%) | 12 MB (0.00%) | 4832 kB (0.01%) | 8192 bytes (0.00%)
osm_file_block | ~135k | 15 MB (0.00%) | 15 MB (0.00%) | 0 bytes (0.00%) |
spatial_ref_sys | ~9k | 7280 kB (0.00%) | 6968 kB (0.00%) | 304 kB (0.00%) | 8192 bytes (0.00%)
key_frequencies | ~87k | 4632 kB (0.00%) | 4624 kB (0.00%) | 0 bytes (0.00%) | 8192 bytes (0.00%)
key_stat_building | ~23k | 1112 kB (0.00%) | 1104 kB (0.00%) | 0 bytes (0.00%) | 8192 bytes (0.00%)
osm_stat_nodes_3_3 | ~14k | 784 kB (0.00%) | 776 kB (0.00%) | 0 bytes (0.00%) | 8192 bytes (0.00%)
osm_stat_ways_3_3 | ~14k | 776 kB (0.00%) | 768 kB (0.00%) | 0 bytes (0.00%) | 8192 bytes (0.00%)
rel | ~7k | 352 kB (0.00%) | 352 kB (0.00%) | 0 bytes (0.00%) |
size_stat | ~313 | 48 kB (0.00%) | 40 kB (0.00%) | 0 bytes (0.00%) | 8192 bytes (0.00%)
osm_file_statistics | ~1 | 8192 bytes (0.00%) | 8192 bytes (0.00%) | 0 bytes (0.00%) |
Подробнее о схеме данных тут и тут.
Индексы, наверное, по всем колонкам, да?
Первичный ключ и гео столбцы.
Немного не понятно, как работает сортировка и партицирование тут..
Если я правильно понимаю, когда у нас таблица разбита на партиции, то сортировка происходит в рамках партиции а не всей таблицы. Или я ошибаюсь?
Если не ошибаюсь, то отсортировав, как у Вас в примере по рейтингу, мы не получим тех строк, которые в других партициях, и в результате выборка будет не верной?
Если я правильно понимаю, когда у нас таблица разбита на партиции, то
сортировка происходит в рамках партиции а не всей таблицы. Или я
ошибаюсь?
Все зависит от плана запроса, который в свою очередь от наличия индексов для столбцов в запросе, схемы партиционирования и статистики по данным. В любом случае секционированые таблицы выгоднее и для построения индексов и для из перестройки и для обслуживания партиций. Даже seqscan скорее всего будет параллельным, что плюс на многопроцессорных системах.
Пример с удачным планом для запроса: select * from ways order by scale desc limit 35 offset 350;
Time: 51,948 ms
Его план использует обратный скан индексов
QUERY PLAN
------------------------------------------------------------------------------------------------------------------------------------
Limit (cost=2232962.80..2233007.46 rows=35 width=552)
-> Merge Append (cost=47.27..1112144267.67 rows=871619354 width=552)
Sort Key: ways.scale DESC
-> Index Scan Backward using ways_000_scale_idx on ways_000 ways_1 (cost=0.43..10734002.76 rows=8962840 width=563)
-> Index Scan Backward using ways_001_scale_idx on ways_001 ways_2 (cost=0.43..19179046.70 rows=15312682 width=436)
-> Index Scan Backward using ways_002_scale_idx on ways_002 ways_3 (cost=0.44..21248802.48 rows=16906140 width=424)
-> Index Scan Backward using ways_003_scale_idx on ways_003 ways_4 (cost=0.43..14207278.34 rows=12459795 width=464)
-> Index Scan Backward using ways_004_scale_idx on ways_004 ways_5 (cost=0.43..16869097.60 rows=13419629 width=469)
-> Index Scan Backward using ways_005_scale_idx on ways_005 ways_6 (cost=0.43..14634701.00 rows=11664735 width=492)
-> Index Scan Backward using ways_006_scale_idx on ways_006 ways_7 (cost=0.43..12280027.78 rows=9914308 width=529)
-> Index Scan Backward using ways_007_scale_idx on ways_007 ways_8 (cost=0.43..8712729.56 rows=7289608 width=624)
-> Index Scan Backward using ways_008_scale_idx on ways_008 ways_9 (cost=0.43..7133623.17 rows=6034490 width=706)
-> Index Scan Backward using ways_009_scale_idx on ways_009 ways_10 (cost=0.43..9378623.09 rows=7586060 width=603)
-> Index Scan Backward using ways_010_scale_idx on ways_010 ways_11 (cost=0.43..10748305.23 rows=8550632 width=576)
-> Index Scan Backward using ways_011_scale_idx on ways_011 ways_12 (cost=0.43..8398076.53 rows=6753388 width=636)
-> Index Scan Backward using ways_012_scale_idx on ways_012 ways_13 (cost=0.43..5614494.70 rows=4740446 width=780)
-> Index Scan Backward using ways_013_scale_idx on ways_013 ways_14 (cost=0.43..9584317.72 rows=7691123 width=617)
-> Index Scan Backward using ways_014_scale_idx on ways_014 ways_15 (cost=0.43..5510768.28 rows=4464275 width=716)
-> Index Scan Backward using ways_015_scale_idx on ways_015 ways_16 (cost=0.43..8243193.23 rows=6884838 width=653)
-> Index Scan Backward using ways_016_scale_idx on ways_016 ways_17 (cost=0.43..6605525.35 rows=5677561 width=722)
-> Index Scan Backward using ways_017_scale_idx on ways_017 ways_18 (cost=0.43..12340746.92 rows=9849491 width=525)
-> Index Scan Backward using ways_018_scale_idx on ways_018 ways_19 (cost=0.43..10091330.41 rows=8070721 width=575)
-> Index Scan Backward using ways_019_scale_idx on ways_019 ways_20 (cost=0.43..12619485.57 rows=10046626 width=529)
-> Index Scan Backward using ways_020_scale_idx on ways_020 ways_21 (cost=0.43..6916614.30 rows=5628859 width=731)
-> Index Scan Backward using ways_021_scale_idx on ways_021 ways_22 (cost=0.43..9145680.99 rows=8046433 width=582)
-> Index Scan Backward using ways_022_scale_idx on ways_022 ways_23 (cost=0.43..3887688.37 rows=3093161 width=600)
-> Index Scan Backward using ways_023_scale_idx on ways_023 ways_24 (cost=0.43..7682436.49 rows=6110087 width=575)
-> Index Scan Backward using ways_024_scale_idx on ways_024 ways_25 (cost=0.43..10497581.90 rows=8378638 width=579)
-> Index Scan Backward using ways_025_scale_idx on ways_025 ways_26 (cost=0.43..8835745.22 rows=7027353 width=534)
-> Index Scan Backward using ways_026_scale_idx on ways_026 ways_27 (cost=0.43..11585319.96 rows=9369376 width=557)
-> Index Scan Backward using ways_027_scale_idx on ways_027 ways_28 (cost=0.43..4100928.35 rows=3294022 width=526)
-> Index Scan Backward using ways_028_scale_idx on ways_028 ways_29 (cost=0.43..10870554.26 rows=8647001 width=529)
-> Index Scan Backward using ways_029_scale_idx on ways_029 ways_30 (cost=0.43..13852693.93 rows=11017560 width=581)
-> Index Scan Backward using ways_030_scale_idx on ways_030 ways_31 (cost=0.43..4039497.37 rows=3684417 width=595)
-> Index Scan Backward using ways_031_scale_idx on ways_031 ways_32 (cost=0.43..10610566.20 rows=8449412 width=570)
-> Index Scan Backward using ways_032_scale_idx on ways_032 ways_33 (cost=0.43..2586771.55 rows=2058661 width=568)
-> Index Scan Backward using ways_033_scale_idx on ways_033 ways_34 (cost=0.43..9823547.59 rows=7831531 width=656)
-> Index Scan Backward using ways_034_scale_idx on ways_034 ways_35 (cost=0.43..3170543.68 rows=2521667 width=514)
-> Index Scan Backward using ways_035_scale_idx on ways_035 ways_36 (cost=0.43..10272123.78 rows=8178766 width=537)
-> Index Scan Backward using ways_036_scale_idx on ways_036 ways_37 (cost=0.43..9725077.21 rows=7735432 width=521)
-> Index Scan Backward using ways_037_scale_idx on ways_037 ways_38 (cost=0.43..10920908.20 rows=8688039 width=610)
-> Index Scan Backward using ways_038_scale_idx on ways_038 ways_39 (cost=0.43..11229155.87 rows=8999835 width=537)
-> Index Scan Backward using ways_039_scale_idx on ways_039 ways_40 (cost=0.43..8574657.61 rows=6884006 width=544)
-> Index Scan Backward using ways_040_scale_idx on ways_040 ways_41 (cost=0.43..11413728.35 rows=9078911 width=545)
-> Index Scan Backward using ways_041_scale_idx on ways_041 ways_42 (cost=0.43..9372766.97 rows=7620146 width=587)
-> Index Scan Backward using ways_042_scale_idx on ways_042 ways_43 (cost=0.43..12105935.99 rows=9629150 width=547)
-> Index Scan Backward using ways_043_scale_idx on ways_043 ways_44 (cost=0.43..17979991.28 rows=14312375 width=530)
-> Index Scan Backward using ways_044_scale_idx on ways_044 ways_45 (cost=0.43..11237868.26 rows=8952180 width=523)
-> Index Scan Backward using ways_045_scale_idx on ways_045 ways_46 (cost=0.43..13321180.18 rows=10602507 width=513)
-> Index Scan Backward using ways_046_scale_idx on ways_046 ways_47 (cost=0.43..12241542.13 rows=9814522 width=540)
-> Index Scan Backward using ways_047_scale_idx on ways_047 ways_48 (cost=0.43..14093608.13 rows=11217847 width=566)
-> Index Scan Backward using ways_048_scale_idx on ways_048 ways_49 (cost=0.43..11770767.77 rows=9398580 width=550)
-> Index Scan Backward using ways_049_scale_idx on ways_049 ways_50 (cost=0.43..11082052.03 rows=8863425 width=598)
-> Index Scan Backward using ways_050_scale_idx on ways_050 ways_51 (cost=0.43..9361022.84 rows=7534409 width=569)
-> Index Scan Backward using ways_051_scale_idx on ways_051 ways_52 (cost=0.56..25932871.02 rows=20787168 width=543)
-> Index Scan Backward using ways_052_scale_idx on ways_052 ways_53 (cost=0.43..17771993.12 rows=14157957 width=526)
-> Index Scan Backward using ways_053_scale_idx on ways_053 ways_54 (cost=0.43..11884060.47 rows=9465129 width=571)
-> Index Scan Backward using ways_054_scale_idx on ways_054 ways_55 (cost=0.43..11702717.53 rows=9415987 width=543)
-> Index Scan Backward using ways_055_scale_idx on ways_055 ways_56 (cost=0.43..9286006.28 rows=7391109 width=618)
-> Index Scan Backward using ways_056_scale_idx on ways_056 ways_57 (cost=0.43..9262029.47 rows=7367119 width=607)
-> Index Scan Backward using ways_057_scale_idx on ways_057 ways_58 (cost=0.43..10123432.47 rows=8069411 width=592)
-> Index Scan Backward using ways_058_scale_idx on ways_058 ways_59 (cost=0.43..7755095.67 rows=6234346 width=670)
-> Index Scan Backward using ways_059_scale_idx on ways_059 ways_60 (cost=0.43..7281365.72 rows=6169332 width=661)
-> Index Scan Backward using ways_060_scale_idx on ways_060 ways_61 (cost=0.43..10122877.37 rows=8162266 width=596)
-> Index Scan Backward using ways_061_scale_idx on ways_061 ways_62 (cost=0.43..5430863.15 rows=4370853 width=624)
-> Index Scan Backward using ways_062_scale_idx on ways_062 ways_63 (cost=0.43..8251841.72 rows=6963772 width=631)
-> Index Scan Backward using ways_063_scale_idx on ways_063 ways_64 (cost=0.43..2891595.30 rows=2627670 width=633)
-> Index Scan Backward using ways_064_scale_idx on ways_064 ways_65 (cost=0.43..9784960.02 rows=7838608 width=568)
-> Index Scan Backward using ways_065_scale_idx on ways_065 ways_66 (cost=0.43..7539174.68 rows=6152933 width=596)
-> Index Scan Backward using ways_066_scale_idx on ways_066 ways_67 (cost=0.43..9173091.27 rows=7297383 width=612)
-> Index Scan Backward using ways_067_scale_idx on ways_067 ways_68 (cost=0.43..10246979.92 rows=8247090 width=563)
-> Index Scan Backward using ways_068_scale_idx on ways_068 ways_69 (cost=0.43..7200272.87 rows=5745960 width=659)
-> Index Scan Backward using ways_069_scale_idx on ways_069 ways_70 (cost=0.43..9138136.04 rows=7344976 width=619)
-> Index Scan Backward using ways_070_scale_idx on ways_070 ways_71 (cost=0.43..10268320.27 rows=8229844 width=578)
-> Index Scan Backward using ways_071_scale_idx on ways_071 ways_72 (cost=0.43..11453918.01 rows=9118260 width=527)
-> Index Scan Backward using ways_072_scale_idx on ways_072 ways_73 (cost=0.43..9831262.79 rows=8141135 width=506)
-> Index Scan Backward using ways_073_scale_idx on ways_073 ways_74 (cost=0.43..11683915.42 rows=9311915 width=501)
-> Index Scan Backward using ways_074_scale_idx on ways_074 ways_75 (cost=0.43..13889599.06 rows=11399777 width=503)
-> Index Scan Backward using ways_075_scale_idx on ways_075 ways_76 (cost=0.43..11851797.07 rows=9475185 width=545)
-> Index Scan Backward using ways_076_scale_idx on ways_076 ways_77 (cost=0.43..8876670.05 rows=7083628 width=580)
-> Index Scan Backward using ways_077_scale_idx on ways_077 ways_78 (cost=0.43..10057654.63 rows=8087229 width=572)
-> Index Scan Backward using ways_078_scale_idx on ways_078 ways_79 (cost=0.43..9037339.05 rows=7315559 width=596)
-> Index Scan Backward using ways_079_scale_idx on ways_079 ways_80 (cost=0.43..8871341.88 rows=7838637 width=604)
-> Index Scan Backward using ways_080_scale_idx on ways_080 ways_81 (cost=0.43..13198230.43 rows=10672667 width=506)
-> Index Scan Backward using ways_081_scale_idx on ways_081 ways_82 (cost=0.43..17327717.40 rows=13911841 width=453)
-> Index Scan Backward using ways_082_scale_idx on ways_082 ways_83 (cost=0.43..11884679.58 rows=9715200 width=522)
-> Index Scan Backward using ways_083_scale_idx on ways_083 ways_84 (cost=0.43..9718215.08 rows=7802347 width=589)
-> Index Scan Backward using ways_084_scale_idx on ways_084 ways_85 (cost=0.43..9692886.61 rows=7981013 width=558)
-> Index Scan Backward using ways_085_scale_idx on ways_085 ways_86 (cost=0.43..8687789.22 rows=7146330 width=584)
-> Index Scan Backward using ways_086_scale_idx on ways_086 ways_87 (cost=0.43..9558622.99 rows=7626922 width=594)
-> Index Scan Backward using ways_087_scale_idx on ways_087 ways_88 (cost=0.43..11189552.87 rows=9002111 width=558)
-> Index Scan Backward using ways_088_scale_idx on ways_088 ways_89 (cost=0.43..11073334.61 rows=8838901 width=554)
-> Index Scan Backward using ways_089_scale_idx on ways_089 ways_90 (cost=0.43..13255718.16 rows=11195281 width=498)
-> Index Scan Backward using ways_090_scale_idx on ways_090 ways_91 (cost=0.43..15113771.53 rows=12045927 width=487)
-> Index Scan Backward using ways_091_scale_idx on ways_091 ways_92 (cost=0.43..14039524.73 rows=11219574 width=502)
-> Index Scan Backward using ways_092_scale_idx on ways_092 ways_93 (cost=0.43..14764558.05 rows=11840971 width=478)
-> Index Scan Backward using ways_093_scale_idx on ways_093 ways_94 (cost=0.43..15604254.12 rows=12517653 width=474)
-> Index Scan Backward using ways_094_scale_idx on ways_094 ways_95 (cost=0.43..11551367.57 rows=9571524 width=522)
-> Index Scan Backward using ways_095_scale_idx on ways_095 ways_96 (cost=0.43..16365206.54 rows=13028483 width=452)
-> Index Scan Backward using ways_096_scale_idx on ways_096 ways_97 (cost=0.43..12097474.19 rows=9623347 width=499)
-> Index Scan Backward using ways_097_scale_idx on ways_097 ways_98 (cost=0.43..13315421.48 rows=10617219 width=514)
-> Index Scan Backward using ways_098_scale_idx on ways_098 ways_99 (cost=0.43..14050141.10 rows=11553492 width=482)
-> Index Scan Backward using ways_099_scale_idx on ways_099 ways_100 (cost=0.43..11106929.91 rows=9230831 width=498)
-> Index Scan Backward using ways_32767_scale_idx on ways_32767 ways_101 (cost=0.43..2129725.90 rows=1719786 width=1921)
JIT:
Functions: 2
Options: Inlining true, Optimization true, Expressions true, Deforming true
(107 rows)
Этот же план с человечным форматированием
PostgreSQL не выдаст неверный результат, а вот "супер пупер производительная СУБД убийца PostgreSQL" вполне может поступить как вы описали. Или упасть в процессе выполнения с OOM/segfault или сказать что ваш запрос не верный "мы так не умеем как вы хотите", докупите еще GPGPU / RAM / блейдов / Infiniband и попробуйте еще раз.
PostgreSQL в случае недостатка памяти будет использовать диск для промежуточных результатов, merge sort и т.п.
PostgreSQL не выдаст неверный результат, а вот "супер пупер производительная СУБД убийца PostgreSQL" вполне может поступить как вы описали
Это ж будет баг в реализации sql. Я не слышал про СУБД с таким поведением. Они правда есть или это предположение?
Пример с удачным планом для запроса:
select * from ways order by scale desc limit 35 offset 350;
Time: 51,948 ms
В смысле пользы от разбиения на секции раз не очень удачный пример. Если бы секций не было, сканирование по индексу прошло бы быстрее.
Это ж будет баг в реализации sql. Я не слышал про СУБД с таким поведением. Они правда есть или это предположение?
Это наблюдение из опыта, не буду показывать пальцем на них. Конечно фиксят ошибки, кто-то сам находит. В других проектах SQLancer вылавливает логические ошибки в SQL.
В смысле пользы от разбиения на секции раз не очень удачный пример. Если
бы секций не было, сканирование по индексу прошло бы быстрее.
При условии что индекс умещается в памяти и нет вставок в базу. В любом случае лучше десяток небольших индексов обслуживать и перестраивать, чем один монструозный
В простом случае да [используется limit ... offset ] .
Судя по коду у вас как раз такой случай. И я вас так понял, что всё работает с приемлемой скоростью. Или я неправильно понял?
Если хочется быстрее, то конечно надо переходить на ctid
А можно использовать ctid вместе с сортировкой по произвольной колонке?
Первичный ключ и гео столбцы [по ним есть индексы]
На скриншоте можно сортировать по любой колонке. Скорость получается приемлемой несмотря на отсутствие индексов?
И ещё на скриншоте оффсеты совсем маленькие. 352, например. И они меняются на единицу каждый раз. Такое впечатление, что каждая строка загружается отдельным запросом с limit... offset . Страницы из середины или конца больших таблиц при этом загружаются быстро?
И я вас так понял, что всё работает с приемлемой скоростью.
Укажите где я говорил, что произвольные сортировки с миллионными офсетами работают с приемлемой скоростью?
И ещё на скриншоте оффсеты совсем маленькие. 352, например. И они меняются на единицу каждый раз.
Есть и страница 1011, под спойлером "Работает!" в ответе вам. С таймингами в отладчике firefox.
Это же открытый код. Вдруг есть идея как сделать так, чтобы выдавало за 1-2мс на произвольной сортировке и базе, то ваш вклад в код приветствуется!
Укажите где я говорил, что произвольные сортировки с миллионными офсетами работают с приемлемой скоростью?
Ну вы же написали, что получается отображать данные таблиц на сотни гигабайт с помощью постраничной загрузки с возможностью сортировки в базе данных. Наверное вы бы не стали уточнять, что речь идёт о таблицах на сотни гигабайт, если бы скорость работы с ними была неприемлемой. Наверное вы не стали бы говорить про возможность сортировки, если бы с ней были какие-то проблемы.
Есть и страница 1011, под спойлером "Работает!" в ответе вам. С таймингами в отладчике firefox.
Да, странно, что номер страницы 1011, а offset - 352 . Поэтому я и уточняю. Наверное отладчик firefox показывает загрузку какой-то другой страницы? Но вот то, что строки по одной загружаются я правильно понял?
Это же открытый код.
Я чего-то ссылки в статье не нахожу. Плохо ищу?
Вдруг есть идея как сделать так, чтобы выдавало за 1-2мс на произвольной сортировке и базе
Если сделать индексы по каждой колонке, сортировать только по одной колонке, не накладывать фильтры и убрать limit ... offset , то можно . А так - я не знаю как. Вот прочитал что вы написали про большие таблицы, посмотрел на возможность сортировки в интерфейсах и подумал - вдруг вы знаете.
Похоже дело в ваших догадках, "чтении" моих мыслей, да прочтении между строчек! На статье не указан хаб "Высокая производительность", теги "low latency" и уж тем более за время выполнения произвольных запросов с сортировкой по произвольному столбцу я не отвечаю. Датасет легко воспроизводим каждым: дампы планеты OSM доступны, как и утилита загрузки.
У меня проблем с производительностью и не было. Объемы своих данных показал, мои задачи Tabulator успешно решает, таблицы из этой базы данных успешно открывает.
Если долистаете до стотысячных страниц в таблице - записывайте скринкаст, порадуюсь за вашу упорность в достижении поставленных задач!
Я чего-то ссылки в статье не нахожу. Плохо ищу?
Добавил заголовок "Код PostgREST-Tabulator", теперь точно найдете. Исходники не по ссылке, а прямо в этой статье.
Если сделать индексы по каждой колонке, сортировать только по одной
колонке, не накладывать фильтры и убрать limit ... offset , то можно .
Дерзайте! Исходники доступны.
Да, странно, что номер страницы 1011, а offset - 352 . Поэтому я и уточняю.
Видимо колонка в отладчике с адресом не до конца развернута.
А так - я не знаю как. Вот прочитал что вы написали про большие
таблицы, посмотрел на возможность сортировки в интерфейсах и подумал - вдруг вы знаете.
Основная тема публикации о создании интерфейса в браузере, а не оптимизации произвольного запроса в PostgreSQL.
Похоже дело в ваших догадках, "чтении" моих мыслей, да прочтении между строчек!
Да, дело в этом. Я совершенно неправильно истолковал ваш текст.
Поэтому хочу спросить, что вы хотели подчеркнуть, когда написали, что получается отображать данные таблиц на сотни гигабайт с помощью постраничной загрузки с возможностью сортировки в базе данных?
Что благодаря разбиению на страницы можно загружать только часть данных и не нужно ждать пока прогрузится вся таблица? И что благодаря сортировке можно посмотреть не только первые страницы, но и последние.
И таким образом, благодаря этим приёмам получилось отображать данные больших таблиц? Потому то без постраничной загрузки это невозможно?
Я тут тоже высказываю догадки и занимаюсь прочтением между строк, это неправильно. Напишите, пожалуйста, что вы хотели сказать.
И что вы имели в виду под грамотной работой с базой данных? Какие приёмы из статьи?
Я думал будет про то как ChatGPT генерирует таблицы за вас. Как-то не в тренде слвсем
- Внучек возьми вот скриптов домой.
- Деда, да нас этих скриптов дома, как #$*на.
- Так это все нейросети сгенерировали, а дед сам писал.
Попробовал чтобы ChatGPT написал детекторы и настраивал форматтеры таблицы для ссылок и изображений. Уже 10 минут закидываю промпты и поправляю результаты...
не осилила нейросетка поправить готовый компонент
По теме SQL в браузере - ожидал скрипт knex в сотню строк JS и холивар на тему инъекций в сырых запросах для получения общей схемы.
Хорошая идея только в том случае, если в "песочнице" для целей разработки или knex для обучения студентов, при подключении к PostgreSQL запущенному локально в браузере. Последний же вариант просто не реализуем без сервера и прокси на основе websockets, из-за чего идея превращается в обычное "красноглазие".
Жаль knex и разные ORMы пока не годятся для создания продуктивного универсального инструмента для получения срезов из СУБД.
Доступ к БД из клиента иногда оправдан. Представьте что на серверах компании сотни серверов и тысячи различных баз копят различную информацию десятилетиями.
Есть сотни аналитиков разного профиля ранее таскавших данные через PowerQuery. Так устроено что аналитики входят в проектные команды и имеют доступ на чтение к БД.
Глобальной системы управления различными СУБД на тысячи баз с ролевой моделью нет. Аналоги PowerBi закрывают только часть вопросов. Поэтому ищу аналог laravel/phpmyadmin на js.
Собрать приложение можно и на node.js, и подключение к разным sql не проблема, но вот как получить структуру и создать схему на основе рандомной базы большой вопрос.
А зачем для аналитики вообще knex/JS ? Как я понял из вашего описания, нужно то что уже частично умеют системы виртуализиции данных Dremio/Trino
Сервисы неплохие, но в нашем случае анализ данных выполняется на клиенте в Excel. Любые серверы приложений потребуют предоставления им привилегий. Это не наш случай. Межсетевые экраны открыты для конкретных рабочих мест и сотрудники имеют четкий набор прав на уровне баз двнных. Более того, кроме sql существуют базы временных рядов и в excel есть инструменты работы с такими данными. Поэтому нужен способ получения данных от баз до ячеек с минимальным числом шагов
Dremio как раз имеет веб интерфейс и позволяет работать с множеством источников данных через него. Если же интерфейс не нужен, то подключаешься к Dremio как к SQL базе драйвером JDBC/ODBC или по протоколу Arrow Flight Sql и данные как "на тарелочке с голубой каемочкой".
Если же нравится PostgreSQL и не хочется с него уходить, то есть PGSpider для виртуализации данных и куча разных FDW для разных источников. Но это все IMHO не prod ready.
Генерируем простой web интерфейс для просмотра таблиц PostgreSQL