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

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

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

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

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
07.10.2003, 19:16
    #32286863
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Interbase в 1000 раз медленнее MS SQL ????
Голуб Олег
А по полю OKPO индекс имеется?
...
Рейтинг: 0 / 0
07.10.2003, 20:16
    #32286894
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Interbase в 1000 раз медленнее MS SQL ????
Да пофиг, есть тут индексы или нет. На 20 тыс. Перебрать 20 тыс. записей без индекса не сложно. Тут дело в другом чём-то. Пускай лучше статистику из эксперта приведёт о количестве операций чтения и обновления.
...
Рейтинг: 0 / 0
07.10.2003, 20:20
    #32286897
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Interbase в 1000 раз медленнее MS SQL ????
Вот гоню то. Оно не пофиг, конечно, т.к. кол-во переборов будет 20000*кол-во записей в таблице1 :-) Поэтому там НЕОБХОДИМ индекс!
...
Рейтинг: 0 / 0
07.10.2003, 23:51
    #32286951
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Interbase в 1000 раз медленнее MS SQL ????
очень интересно, только что пробовал:
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
09.10.2003, 11:42
    #32288596
Голуб Олег
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Interbase в 1000 раз медленнее MS SQL ????
Вот-вот!

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

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

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


Кстати.

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

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

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


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