![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Fedorenkoda |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 5.8.2002 Репутация: нет Всего: нет |
Уважаемые знатоки!Помогите, пожалуйста, решить проблему.
Я написал запрос на подсчет суммы в таблице MS SQL 7. Запрос выбирает данные из таблицы за 1 месяц.Это выглядит так: where (period between '07/01/02' and '08/01/02') Такой запрос работает примерно 20 секунд. Но т.к. мне нужен универсальный запрос, то я написал хранимую процедуру, в которую передаю эти две даты, т.е. запрос уже будет таким: where (period between @data1 and @data2) Но, что самое удивительное, такой запрос работает почти 1,5 минуты. Вопрос: В чем дело? Никакого существенного различия между запросами я не вижу. Помогите, пожалуйста. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
У тебя в таблице миллионы записей или допотопный компьютер? Если нет, то похоже проблема в том что поле "period" не проиндексировано. Добавьте индекс по этому полю...
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Fedorenkoda |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 5.8.2002 Репутация: нет Всего: нет |
В моей таблице миллионы записей. Поле не проиндексировано. Но вопрос то в другом, почему такая разница во времени выполнения двух идентичных запросов?
|
|||
|
||||
| Fedorenkoda |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 5.8.2002 Репутация: нет Всего: нет |
В запросе участвуют примерно 100000 записей.
1 вариант(время выполнения 26 секунд): Select 'ДГТС ','Абонентная плата','КВС', (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=1) and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07/01/02' and '08/01/02')), (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Branch=1 and c.Client=p.Client and p.ServiceType=2 and (p.Period between '07/01/02' and '08/01/02')),0.00 2 вариант(время выполнения 2 минуты 46 секунд): declare @period1 datetime,@period2 datetime select @period1='07/01/02' select @period2=dateadd(month,1,@period1) Select 'ДГТС ','Абонентная плата','КВС', (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p , DEVICENUMBER d where d.Fine>10 and p.Number=d.Number and (c.Branch=1) and c.Client=p.Client and p.ServiceType=2 and (p.Period between @period1 and @period2)), (select isnull(sum(p.Summa),0.00) from Client c , Pers_Account p where c.Branch=1 and c.Client=p.Client and p.ServiceType=2 and (p.Period between @period1 and @period2)),0.00 В чем же разница между запросами? |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Не знаю, но введение индекса абсолютно необходимо, так как без индекса вы заставляете сервер прочитывать всю таблицу от начала до конца. Введите индекс и у вас отпадёт эта проблема.
PS. Вообще-то это тема для раздела баз данных. Перенести туда? -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |