|
|
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
Всем привет. Этото вопрос тему я разместил в двух форумах - тут и в Oracle. Не знаю, один ли это прием или нет. В общем суть вопроса - можно ли в CTE с помощью with as сделать индексированный набор, чтобы потом по нему не был full scan? У меня with as с друго таблицей, в обоих ~1 000 000 записей и склеиваются по ключу. Упрощенно это так: Код: plaintext 1. 2. 3. Кто не понял - хочу вывести записи из contract1 по некому фильтру и такие, которых нет в таблице contract или у которых название отличаются с той же contract. Возможно ли это? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 13:56 |
|
||
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
Alexey AgafonovВсем привет. Этото вопрос тему я разместил в двух форумах - тут и в Oracle. Не знаю, один ли это прием или нет. В общем суть вопроса - можно ли в CTE с помощью with as сделать индексированный набор, чтобы потом по нему не был full scan? У меня with as с друго таблицей, в обоих ~1 000 000 записей и склеиваются по ключу. Упрощенно это так: Код: plaintext 1. 2. 3. Кто не понял - хочу вывести записи из contract1 по некому фильтру и такие, которых нет в таблице contract или у которых название отличаются с той же contract. Возможно ли это? Спасибо. Построение индекса временного на 1 запрос (даже если бы это было возможно) было бы дороже по ресурсам чем seq scab+hash join или sort+merge join. База сама прекрасно разберется как лучше. -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:00 |
|
||
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
У меня один селект отрабатывает за 10 секунд, а приведенный мною запрос (миллион left join миллион) уже час. Это меня и смутило. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:06 |
|
||
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
Alexey Agafonov, если вдруг поможет, есть возможность с помощью триграмм проиндексировать ваше поле gin/gist индексом. Тогда любой LIKE подцепится. В местном FAQ даже тесты оставлял - смотрите. Главное, чтоб в вашем текстовом поле не было сочинений Льва Толстого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:17 |
|
||
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
Alexey AgafonovУ меня один селект отрабатывает за 10 секунд, а приведенный мною запрос (миллион left join миллион) уже час. Это меня и смутило. Такие вопросы начинаются с приведения explain analyze запроса. Или если не получается привести explain analyze хотя бы explain. Какой 1 select за 10 секунд отрабатывается? -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:29 |
|
||
|
Индексированный with as
|
|||
|---|---|---|---|
|
#18+
Alexey Agafonov, В случае с PostgreSQL, все WITH подзапросы материализуются (дается гарантия, что исходный запрос будет выполнен только 1 раз). Т.е. предикаты внутрь таких подзапросов не проталкиваются. В ORACLE-же такой изоляции нету и для получения аналогичного Postgres-у поведения надо добавить хинт /*+ MATERIALIZE */ в подзапрос. Приведите `EXPLAIN (analyze, buffers)` ваших запросов, чтоб более детально говорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2015, 14:39 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=108&tid=1997876]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
36ms |
get tp. blocked users: |
2ms |
| others: | 242ms |
| total: | 357ms |

| 0 / 0 |
