powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Interbase в 1000 раз медленнее MS SQL ????
15 сообщений из 15, страница 1 из 1
Interbase в 1000 раз медленнее MS SQL ????
    #32285647
Голуб Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу извинить за такую "яркую" тему.
Хотелось просто обратить внимание.

Я, конечно, понимаю, что так быть не может. Но...

Смотрите пример.

Имеется таблица на 20 тыс. с лишним записей след.структуры:

OKPO Char(10), - идентификационный код клиента
All_Dolg Currency, - общий долг клиента
Dolg Currency, - долг клиента по одной ссуде
...


С одним идентификационным кодом может быть одна или несколько записей.
Поле Dolg изначально заполнено числами,
поле All_Dolg - пустое.

Индексы стоят всевозможные.

Выполняем запрос:

Update таблица1
set таблица1.All_Dolg=(Select Sum(tab2)
from таблица1 tab2
Where tab2.OKPO=таблица1.OKPO)

Работает минут 20

На MS SQL такой запрос отрабатывает за 1-2 секунды.

В чем проблема?
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32285711
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема во вложенном select
напиши ХП и будут те же самые 2 секунды..
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32285723
Voha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть подборка статей на тему вложенных запросов и их оптимизацию
http://www.krista.ru/ib/][гдето тут]
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32285792
Серега
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одна из причин может быть например из-за
>Индексы стоят всевозможные
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32285794
srf2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Серега: да там план natural будет.
так что и без индексов тормоза мама не горюй будут :)
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286627
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эта бадяга называется кореллированный подзапрос, когда идет обращение к внешнему, индексы при таком запросе не помогут. Определенно лучше сделать SP и не парится. Кстати update/insert с индексами проходит дольше, чем без них.
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286804
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И все-таки:
- кроме всевозможных индексов, есть ли индекс на поле OKPO, в обеих таблицах? Активны ли они, если есть?
- каким получается план запроса?
- вообще-то такая структура таблицы несколько противоречит идеям о нормализации и проч..
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286858
Голуб Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю на все вопросы сразу.

1. На сегодняшний день проблема решена следующим образом:

For Select OKPO, Sum(Dolg)
From таблица1
Group by OKPO
into :tmp_OKPO, :tmp_Dolg
do begin
update таблица1
set All_Dolg=:tmp_Dolg
where OKPO=:tmp_OKPO;
end

работает в 2-3 раза быстрее, но все равно недостаточно быстро.

2. по полям Dolg b All_Dolg индексов нет.

3. Явно задать план запроса не получается.
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286863
Фотография Dnico
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Голуб Олег
А по полю OKPO индекс имеется?
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286894
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пофиг, есть тут индексы или нет. На 20 тыс. Перебрать 20 тыс. записей без индекса не сложно. Тут дело в другом чём-то. Пускай лучше статистику из эксперта приведёт о количестве операций чтения и обновления.
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286897
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот гоню то. Оно не пофиг, конечно, т.к. кол-во переборов будет 20000*кол-во записей в таблице1 :-) Поэтому там НЕОБХОДИМ индекс!
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32286951
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень интересно, только что пробовал:
UPDATE TT
SET TT.DOLGALL = (SELECT SUM(TT2.DOLG) FROM TT TT2
WHERE TT2.OKPO = TT.OKPO)
дает план natural для основного запроса, и для внутреннего селекта,
а:
UPDATE TT TT1
SET TT1.DOLGALL = (SELECT SUM(TT2.DOLG) FROM TT TT2
WHERE TT2.OKPO = TT1.OKPO)
дает использование индекса для внутреннего селекта!
(firebird 1.5) Вероятно использование алиаса для внешней таблицы
как-то подсказывает оптимизатору, что делать.
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32288596
Голуб Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот-вот!

Я долго размышлял над этой проблемой, и пришел к выводу, что проблема в том, что Интербейс почему-то не не хочет использовать индексы (и не дает указать их явно) в Update-запросах.

А как это обойти?

Или может я что-то не понимаю и не так делаю?


Кстати.

UPDATE TT TT1
SET TT1.DOLGALL = (SELECT SUM(TT2.DOLG) FROM TT TT2
WHERE TT2.OKPO = TT1.OKPO)

на Interbase 7 все равно используется без индексов. :(
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32288601
Голуб Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, забыл сказать.

По полю OKPO индекс есть.
...
Рейтинг: 0 / 0
Interbase в 1000 раз медленнее MS SQL ????
    #32288803
Gold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой тут на UPDATE индекс - там же условия нету. Индекс должен использоваться в подзапросе. Если ИБ этого не умеет - выкинь его и возьми FB или YA - они это давно умеют. В крайнем случае можно написать ХП.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Interbase в 1000 раз медленнее MS SQL ????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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