powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оптимизировать запрос/вставку
11 сообщений из 11, страница 1 из 1
Оптимизировать запрос/вставку
    #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
Оптимизировать запрос/вставку
    #34110100
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сам SELECT сколько выполняется? Сколько данных в остальных таблицах? Что с индексами?
...
Рейтинг: 0 / 0
Оптимизировать запрос/вставку
    #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
Оптимизировать запрос/вставку
    #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
Оптимизировать запрос/вставку
    #34110480
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Сергеевич

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



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

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

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

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

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



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

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

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

База не моя, посмотрел, индекс по полю serno есть.
...
Рейтинг: 0 / 0
Оптимизировать запрос/вставку
    #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
Оптимизировать запрос/вставку
    #34113346
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, добавил индекс по нужному полю и 2 тысячи строк заполняет за 0,156 с. Огромное спасибо.
...
Рейтинг: 0 / 0
Оптимизировать запрос/вставку
    #34115891
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей СергеевичПоправка -не 6, а 9. 6 секунд - время выполнения.Великая разница...
Сергей СергеевичА получается потому что в таблице rbt_midas_tmp содержится 9 записей, по которым и выбираются/вычисляются нужные строки и вставляются в результирующую таблицу.Как верно указали выше у Вас таблица участвует в запросе без "вязки". Если в ней 150000 записей мне бы очень-очень хотелось понять, как в результате получилось всего 9 строк...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Оптимизировать запрос/вставку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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