Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 Оптимизировать запрос/вставку  [new]
Сергей Сергеевич
Member

Откуда: Астрахань-Москва
Сообщений: 347
insert into rbt_payment_tmp 
	select x0.serno, x0.number, x1.bankaccount, (x1.balance-x0.balance), x1.currency, x2.embname 
		from caccounts x0, rbt_midas_tmp x1, embformat x2 where (x0.serno=x1.serno AND x0.serno=
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))


При 9 строках в талбице x1 команда выполняется около 6 секунд. Есть ли возможность оптимизировать запрос?
7 ноя 06, 17:08    [3364509]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Евгений Фадеев
Member [заблокирован]

Откуда: Russia, Moscow
Сообщений: 2374
Сам SELECT сколько выполняется? Сколько данных в остальных таблицах? Что с индексами?
7 ноя 06, 18:16    [3365015]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
vasilis
Member

Откуда: Украина, Киев
Сообщений: 2205
Сергей Сергеевич
insert into rbt_payment_tmp 
	select x0.serno, x0.number, x1.bankaccount, (x1.balance-x0.balance), x1.currency, x2.embname 
		from caccounts x0, rbt_midas_tmp x1, embformat x2 where (x0.serno=x1.serno AND x0.serno=
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))


При 9 строках в талбице x1 команда выполняется около 6 секунд. Есть ли возможность оптимизировать запрос?

А сколько строк в таблицах x0 и ,особенно, в x2, по которой я вообще не увидел условия соединения (т.е. будет декартово произведение).
Сколько все таки вставляется строк в таблицу rbt_payment_tmp за эти 6 секунд ?
7 ноя 06, 19:54    [3365406]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Сергей Сергеевич
Member

Откуда: Астрахань-Москва
Сообщений: 347
vasilis
Сергей Сергеевич
insert into rbt_payment_tmp 
	select x0.serno, x0.number, x1.bankaccount, (x1.balance-x0.balance), x1.currency, x2.embname 
		from caccounts x0, rbt_midas_tmp x1, embformat x2 where (x0.serno=x1.serno AND x0.serno=
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))


При 9 строках в талбице x1 команда выполняется около 6 секунд. Есть ли возможность оптимизировать запрос?

А сколько строк в таблицах x0 и ,особенно, в x2, по которой я вообще не увидел условия соединения (т.е. будет декартово произведение).
Сколько все таки вставляется строк в таблицу rbt_payment_tmp за эти 6 секунд ?


А ведь Вы правы по поводу декартова произведения. Правильнее думаю будет вот так:

insert into rbt_payment_tmp 
	select x0.serno, x0.number, x1.bankaccount, (x1.balance-x0.balance), x1.currency, x2.embname 
		from caccounts x0, rbt_midas_tmp x1, embformat x2 where (x0.serno=x1.serno AND x0.serno=x2.serno AND x0.serno=
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

В итоге за 6 секунд вставляется всего 9 строк в таблицу. В таблицах Х0 и х2 строк много (около 150 тыс), врать не буду, завтра посмотрю и скажу точно
7 ноя 06, 21:13    [3365541]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
onstat-
Member

Откуда:
Сообщений: 6941
Сергей Сергеевич


В итоге за 6 секунд вставляется всего 9 строк в таблицу. В таблицах Х0 и х2 строк много (около 150 тыс), врать не буду, завтра посмотрю и скажу точно




Похоже проблема здесь,
но лучше если Вы предоставите план.


			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

Ищите индекс по caccountstmt.bankaccount
99% там нет индекса.
7 ноя 06, 22:42    [3365669]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Евгений Фадеев
Member [заблокирован]

Откуда: Russia, Moscow
Сообщений: 2374
Сергей Сергеевич
insert into rbt_payment_tmp 
	select x0.serno, x0.number, x1.bankaccount, (x1.balance-x0.balance), x1.currency, x2.embname 
		from caccounts x0, rbt_midas_tmp x1, embformat x2 where (x0.serno=x1.serno AND x0.serno=
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))
В итоге за 6 секунд вставляется всего 9 строк в таблицу. В таблицах Х0 и х2 строк много (около 150 тыс), врать не буду, завтра посмотрю и скажу точно
Не очень понятно как при наличии 150000 строк в Х2 у Вас получается всего 6 строк в resultset'е...
8 ноя 06, 11:36    [3367257]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Сергей Сергеевич
Member

Откуда: Астрахань-Москва
Сообщений: 347
Поправка -не 6, а 9. 6 секунд - время выполнения.

А получается потому что в таблице rbt_midas_tmp содержится 9 записей, по которым и выбираются/вычисляются нужные строки и вставляются в результирующую таблицу.
8 ноя 06, 11:41    [3367323]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Сергей Сергеевич
Member

Откуда: Астрахань-Москва
Сообщений: 347
onstat-
Сергей Сергеевич


В итоге за 6 секунд вставляется всего 9 строк в таблицу. В таблицах Х0 и х2 строк много (около 150 тыс), врать не буду, завтра посмотрю и скажу точно




Похоже проблема здесь,
но лучше если Вы предоставите план.


			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

Ищите индекс по caccountstmt.bankaccount
99% там нет индекса.


База не моя, посмотрел, индекс по полю serno есть.
8 ноя 06, 14:57    [3369166]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
onstat-
Member

Откуда:
Сообщений: 6941
Сергей Сергеевич
onstat-
Сергей Сергеевич


В итоге за 6 секунд вставляется всего 9 строк в таблицу. В таблицах Х0 и х2 строк много (около 150 тыс), врать не буду, завтра посмотрю и скажу точно




Похоже проблема здесь,
но лучше если Вы предоставите план.


			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

Ищите индекс по caccountstmt.bankaccount
99% там нет индекса.


База не моя, посмотрел, индекс по полю serno есть.


Индекс по serno Вам не поможет.
Вам нужен индекс по полю bankaccount.
Потому, что на поиск нужного max(serno) from caccountstmt,
необходимо зделать полное сканирование таблицы caccountstmt.

Если мне не изменяет память, Ваш запрос называется коррелируемым,
это когда выполнения запроса влияет на предикаты в подзапросе.

Лучше если вы всетаки включите set explain on; сначала посмотрите сами,
а если что будет непонятно спросите здесь.
8 ноя 06, 15:29    [3369525]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Сергей Сергеевич
Member

Откуда: Астрахань-Москва
Сообщений: 347
Действительно, добавил индекс по нужному полю и 2 тысячи строк заполняет за 0,156 с. Огромное спасибо.
8 ноя 06, 17:24    [3370761]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизировать запрос/вставку  [new]
Евгений Фадеев
Member [заблокирован]

Откуда: Russia, Moscow
Сообщений: 2374
Сергей Сергеевич
Поправка -не 6, а 9. 6 секунд - время выполнения.
Великая разница...
Сергей Сергеевич
А получается потому что в таблице rbt_midas_tmp содержится 9 записей, по которым и выбираются/вычисляются нужные строки и вставляются в результирующую таблицу.
Как верно указали выше у Вас таблица участвует в запросе без "вязки". Если в ней 150000 записей мне бы очень-очень хотелось понять, как в результате получилось всего 9 строк...
9 ноя 06, 13:50    [3375671]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить