|
|
|
Быстрая выборка по содержимому поля int[]
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, коллеги! Существует таблица размера 41 ГБ в 100 млн записей. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Пример: Поле parent_ge_id содержит 1. Поле child_ge_id содержит 7. В таком случае поле ipath содержит элементы, с помощью которых можно прийти от 1 к 7. К примеру, массив ipath будет содержать 1,3,6,9,4,7. В соответствии с условиями задания, мне нужно находить и удалять строки в tst_good_equivalent_links_total, поле ipath, которых будет содержать соответствующие одиночные связи. Стоящие рядом элементы ipath и будут составлять одиночные связи, в вышеуказанном примере это 1-3,3-6,6-9,9-4,4-7. Для поиска я выполняю запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Выборка 120000 строк. Скорость поиска в ipath оставляет желать лучшего. Время вполнения 10-15 мин. План выполнения: Bitmap Heap Scan on tst_good_equivalent_links_total gelt (cost=1091.81..357179.92 rows=419 width=16) Recheck Cond: ('15770615 & 15827090'::query_int ~~ ipath) Filter: ((cross_type = 2) AND (abs((idx(ipath, 15770615) - idx(ipath, 15827090))) = 1)) -> Bitmap Index Scan on gelt_ipath_idx (cost=0.00..1091.71 rows=99161 width=0) Index Cond: ('15770615 & 15827090'::query_int ~~ ipath) Размер индекса gelt_ipath_idx - 62 GB. Как мне ускорить выборку строк по сегменту пути int[]? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.03.2015, 19:13 |
|
||
|
Быстрая выборка по содержимому поля int[]
|
|||
|---|---|---|---|
|
#18+
RickkkЗдравствуйте, коллеги! Существует таблица размера 41 ГБ в 100 млн записей. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Пример: Поле parent_ge_id содержит 1. Поле child_ge_id содержит 7. В таком случае поле ipath содержит элементы, с помощью которых можно прийти от 1 к 7. К примеру, массив ipath будет содержать 1,3,6,9,4,7. В соответствии с условиями задания, мне нужно находить и удалять строки в tst_good_equivalent_links_total, поле ipath, которых будет содержать соответствующие одиночные связи. Стоящие рядом элементы ipath и будут составлять одиночные связи, в вышеуказанном примере это 1-3,3-6,6-9,9-4,4-7. Для поиска я выполняю запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Выборка 120000 строк. Скорость поиска в ipath оставляет желать лучшего. Время вполнения 10-15 мин. План выполнения: Bitmap Heap Scan on tst_good_equivalent_links_total gelt (cost=1091.81..357179.92 rows=419 width=16) Recheck Cond: ('15770615 & 15827090'::query_int ~~ ipath) Filter: ((cross_type = 2) AND (abs((idx(ipath, 15770615) - idx(ipath, 15827090))) = 1)) -> Bitmap Index Scan on gelt_ipath_idx (cost=0.00..1091.71 rows=99161 width=0) Index Cond: ('15770615 & 15827090'::query_int ~~ ipath) Размер индекса gelt_ipath_idx - 62 GB. Как мне ускорить выборку строк по сегменту пути int[]? приводите explain (analyze, buffers, timing, costs) вместо explain и не забывайте включать track_io_timing тогда можно будет сказать что то... explain - только план по нему нельзя сказать обычно плохой он или хороший и в чем проблема может быть. PS: если у вас на сервере не 128Gb памяти я бы предположил что в работе с диском. --Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.03.2015, 02:23 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=113&tid=1998088]: |
0ms |
get settings: |
7ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 397ms |

| 0 / 0 |
