Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Вниз

Время выполнения процедуры   Найти похожие ветки 

 
wild_arg ©   (2004-04-05 15:44) [0]

Народ может кто сталкивался?
Написал SQL-код процедуры в Query Analyzer. Все отдладил. Параметры процедуры задал переменными. Все выполняется 12 сек.
Делаю такую процедуру, запускаю ее - она выполняется больше минуты.
В коде ничего не менял - почему такая разница во времени выполнения


 
Ega23 ©   (2004-04-05 15:50) [1]

Делаю такую процедуру, запускаю ее - она выполняется больше минуты.

А как ты до этого её запускал? Из QA? Когда 12 секунд выполнялось?


 
Desdechado ©   (2004-04-05 15:54) [2]

прикол может быть в том, что в QA данные до конца не фетчаться
фетч может много времени занять


 
Ega23 ©   (2004-04-05 16:25) [3]

прикол может быть в том, что в QA данные до конца не фетчаться
фетч может много времени занять

Это в смысле?


 
sniknik ©   (2004-04-05 16:34) [4]

у него серверный курсор стоит, данные(первые) показываются сразу после выполнения запроса дальше фетчатся в бакграунде до конца выборки.
у тебя (при клиентском курсоре) ждет самого последнего байта выборки(запрос+передача) а после отображается.


 
Ega23 ©   (2004-04-05 16:35) [5]

А, в этом смысле...


 
wild_arg ©   (2004-04-05 16:43) [6]

Народ, решил проблему! :)
Оказалось, я где-то нашел такую хрень, по разному план выполнения строится:
привожу как понял. рассмотрим два примера:
1.
declare @date datetime
set @date = "2004-03-01"
select * from Заявки where date>=@date

2.
select * from Заявки where date>="2004-03-01"

если у нас по полю Date построен индекс, то он будет задействован только во втором случае. в первом, как написано было, оптимизатор не знает чего мы там будем искать и индексом не пользуется.
Вот такая хрень.
Оформим этот код в процедуру:

create procedure Proc
        @date datetime
as
select * from Заявки where date>=@date

Когда мы вызовем ее в анализаторе: Exec Proc "2004-03-01", то оптимизатор на входе после замены в тексте параметров на значения, получит код приведенный в примере 2 и при оптимизации воспользуется индексом.

А у меня в задаче кривые индексы (ну база не моя, убивать я их не стал). И вот какая хрень вышла, что написав код наподобе примера 1., оптимизатор не юзает индекс и выполняет запрос быстрее, а оформляем процедуру и все, хана, пошла работа над индексом. НО! :) я обманул его, написал процедуру таким образом:

create procedure Proc
        @_date datetime
as
declare @date datetime
set @date = @_date
select * from Заявки where date>=@date

и оптимизатор, получает код похожий на пример 1. и индекс не юзает :)
Но, наверное, можно просто как-то отключить использование индексов? Типа set useindex off или что-то в этом роде. Не знаете как?


 
wild_arg ©   (2004-04-05 16:48) [7]

это все тут
http://www.osp.ru/win2000/sql/dialogs/311_1_print.htm


 
ZrenBy ©   (2004-04-05 16:54) [8]

Можно указать принудительное сканирование таблицы с помощью
WITH(INDEX=0)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.032 c
3-1081180944
alexey
2004-04-05 20:02
2004.05.02
ДБКомбобокс


8-1072283969
Alexis
2003-12-24 19:39
2004.05.02
проигрывать звуковой файл при старте


3-1081178285
olhovik
2004-04-05 19:18
2004.05.02
Добавление записи в файл


14-1081633628
dosik
2004-04-11 01:47
2004.05.02
Выхожу в свет


3-1080901680
tv
2004-04-02 14:28
2004.05.02
Литература по InterBase





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский