Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить запрос / 3 сообщений из 3, страница 1 из 1
07.04.2006, 16:13
    #33652693
msa@n-e.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос
Народ! Как ускорить запрос типа
update table1 set r1=table2.r1, r2=table2.r2 from table2 where r3=table2.r3

В таблицах table1 и table2 по 50000 записей и есть интексы table2.r3 и table1.r3 , а план запроса говорит что будет делаться последовательное сканирование по обеим таблицам. Как - нибудь можно сделать так что бы использовались индексы или быстрее этот апдейт выполнить никак нельзя?!
...
Рейтинг: 0 / 0
10.04.2006, 09:43
    #33654964
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос
msa@n-e.ruбыстрее этот апдейт выполнить никак нельзя?!Возможно, что Hash Join будет для этого запроса действительно самым быстрым планом.

msa@n-e.ruКак - нибудь можно сделать так что бы использовались индексыС помощью set_enable_*.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
=> create table table1 ( id integer primary key, name text );
CREATE TABLE
=> create table table2 ( id integer primary key, name text );
CREATE TABLE
=> explain update table1 set name=table2.name from table2 where table1.id=table2.id;
                              QUERY PLAN
-----------------------------------------------------------------------
 Hash Join  (cost= 24 . 50 .. 66 . 40  rows= 1160  width= 42 )
   Hash Cond: ("outer".id = "inner".id)
   ->  Seq Scan on table2  (cost= 0 . 00 .. 21 . 60  rows= 1160  width= 36 )
   ->  Hash  (cost= 21 . 60 .. 21 . 60  rows= 1160  width= 10 )
         ->  Seq Scan on table1  (cost= 0 . 00 .. 21 . 60  rows= 1160  width= 10 )
( 5  rows)

=> set enable_hashjoin to off;
SET
=> explain update table1 set name=table2.name from table2 where table1.id=table2.id;
                                     QUERY PLAN
-------------------------------------------------------------------------------------
 Merge Join  (cost= 0 . 00 .. 124 . 92  rows= 1160  width= 42 )
   Merge Cond: ("outer".id = "inner".id)
   ->  Index Scan using table1_pkey on table1  (cost= 0 . 00 .. 53 . 76  rows= 1160  width= 10 )
   ->  Index Scan using table2_pkey on table2  (cost= 0 . 00 .. 53 . 76  rows= 1160  width= 36 )
( 4  rows)
...
Рейтинг: 0 / 0
10.04.2006, 12:50
    #33655620
msa@n-e.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как ускорить запрос
LeXa NalBat msa@n-e.ruбыстрее этот апдейт выполнить никак нельзя?!Возможно, что Hash Join будет для этого запроса действительно самым быстрым планом.

msa@n-e.ruКак - нибудь можно сделать так что бы использовались индексыС помощью set_enable_*.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
=> create table table1 ( id integer primary key, name text );
CREATE TABLE
=> create table table2 ( id integer primary key, name text );
CREATE TABLE
=> explain update table1 set name=table2.name from table2 where table1.id=table2.id;
                              QUERY PLAN
-----------------------------------------------------------------------
 Hash Join  (cost= 24 . 50 .. 66 . 40  rows= 1160  width= 42 )
   Hash Cond: ("outer".id = "inner".id)
   ->  Seq Scan on table2  (cost= 0 . 00 .. 21 . 60  rows= 1160  width= 36 )
   ->  Hash  (cost= 21 . 60 .. 21 . 60  rows= 1160  width= 10 )
         ->  Seq Scan on table1  (cost= 0 . 00 .. 21 . 60  rows= 1160  width= 10 )
( 5  rows)

=> set enable_hashjoin to off;
SET
=> explain update table1 set name=table2.name from table2 where table1.id=table2.id;
                                     QUERY PLAN
-------------------------------------------------------------------------------------
 Merge Join  (cost= 0 . 00 .. 124 . 92  rows= 1160  width= 42 )
   Merge Cond: ("outer".id = "inner".id)
   ->  Index Scan using table1_pkey on table1  (cost= 0 . 00 .. 53 . 76  rows= 1160  width= 10 )
   ->  Index Scan using table2_pkey on table2  (cost= 0 . 00 .. 53 . 76  rows= 1160  width= 36 )
( 4  rows)


Фенкс! set enable_hashjoin to off; помогло! И с использованием индексов запрос у меня выполянется в три раза быстрее чем Hash Join :)
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как ускорить запрос / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]