Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оптимизировать запрос/вставку / 11 сообщений из 11, страница 1 из 1
07.11.2006, 17:08
    #34109825
Сергей Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Код: plaintext
1.
2.
3.
4.
5.
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 секунд. Есть ли возможность оптимизировать запрос?
...
Рейтинг: 0 / 0
07.11.2006, 18:16
    #34110100
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сам SELECT сколько выполняется? Сколько данных в остальных таблицах? Что с индексами?
...
Рейтинг: 0 / 0
07.11.2006, 19:54
    #34110306
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сергей Сергеевич
Код: plaintext
1.
2.
3.
4.
5.
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 секунд ?
...
Рейтинг: 0 / 0
07.11.2006, 21:13
    #34110393
Сергей Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
vasilis Сергей Сергеевич
Код: plaintext
1.
2.
3.
4.
5.
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 секунд ?

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

Код: plaintext
1.
2.
3.
4.
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 тыс), врать не буду, завтра посмотрю и скажу точно
...
Рейтинг: 0 / 0
07.11.2006, 22:42
    #34110480
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сергей Сергеевич

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



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

Код: plaintext
1.
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

Ищите индекс по caccountstmt.bankaccount
99% там нет индекса.
...
Рейтинг: 0 / 0
08.11.2006, 11:36
    #34111450
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сергей Сергеевич
Код: plaintext
1.
2.
3.
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'е...
...
Рейтинг: 0 / 0
08.11.2006, 11:41
    #34111485
Сергей Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Поправка -не 6, а 9. 6 секунд - время выполнения.

А получается потому что в таблице rbt_midas_tmp содержится 9 записей, по которым и выбираются/вычисляются нужные строки и вставляются в результирующую таблицу.
...
Рейтинг: 0 / 0
08.11.2006, 14:57
    #34112567
Сергей Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
onstat- Сергей Сергеевич

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



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

Код: plaintext
1.
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

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

База не моя, посмотрел, индекс по полю serno есть.
...
Рейтинг: 0 / 0
08.11.2006, 15:29
    #34112767
onstat-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сергей Сергеевич onstat- Сергей Сергеевич

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



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

Код: plaintext
1.
			(select max(serno) from caccountstmt where bankaccount=x1.bankaccount))

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

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

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

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

Лучше если вы всетаки включите set explain on; сначала посмотрите сами,
а если что будет непонятно спросите здесь.
...
Рейтинг: 0 / 0
08.11.2006, 17:24
    #34113346
Сергей Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Действительно, добавил индекс по нужному полю и 2 тысячи строк заполняет за 0,156 с. Огромное спасибо.
...
Рейтинг: 0 / 0
09.11.2006, 13:50
    #34115891
Евгений Фадеев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизировать запрос/вставку
Сергей СергеевичПоправка -не 6, а 9. 6 секунд - время выполнения.Великая разница...
Сергей СергеевичА получается потому что в таблице rbt_midas_tmp содержится 9 записей, по которым и выбираются/вычисляются нужные строки и вставляются в результирующую таблицу.Как верно указали выше у Вас таблица участвует в запросе без "вязки". Если в ней 150000 записей мне бы очень-очень хотелось понять, как в результате получилось всего 9 строк...
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оптимизировать запрос/вставку / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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