-
Можно ли для MSSQL 2005 сделать отмену выполнения запроса?
Вопрос мне кажется наболевший, но ответа нигде нет...
-
через что?
-
Наверное через ADO...
Вроде бы нашел
ADOCommand.Execute;
repeat
Application.ProcessMessages;
if IsAbort then
ADOCommand.Cancel;
until (stExecuting in ADOCommand.States = False);
Более элегантного я так понимаю не получится найти....
-
Что означает "отменить выполнение запроса"?
-
Прервать долго выполняющийся запрос
-
Это вряд ли получится.
Но попробуй асинхронно из другого потока. Не сможешь попробовать - забей. Лучше запросы пиши быстрые :))
-
Ага... А если база на терабайт? И ищем внтури xml например?
Я думаю ускроить вряд ли получиться, а вот отменить часто хочется... :-)
-
> Вроде бы нашел
при синхронном выполнении ADOCommand.Execute; "отдаст" управление только после завершения выполнения запроса и получении рекордсета (при клиентском курсоре)
смысл дальнейшего кода нулевой...
при асинхронном тоже смысла мало, но по другому поводу. (нафига специальный цикл "тормозящий" ввыполнение в этом месте если Cancel можно выполнить в любом...)
> Более элегантного я так понимаю не получится найти....
а ты не ищи, ты изучай, и пиши по надобности то, что именно тебе необходимо.
-
> Я думаю ускроить вряд ли получиться
зачем данные в которых делается поиск хранятся в виде не предназначеном для него?
поменяй структуру базу, включи полнотекстовый поиск (текст индексируется по словам из которых состоит) и ищи... быстро. даже на террабайт. (главное чтобы результат был в несколько записей а не весь террабайт)
-
> DmitriyG. © (11.03.08 16:46) [2]
1) Добавить в цикл Sleep
2) На время ожидания поднять формочку, в которой крутить мультики, с кнопкой отмена
3) Способа лучше нету. Тока убедись, что запрос выполняется асинхронно.
ЗЫ. Скептикам : у нас в фин.отчетности большая часть запросов выполняется часы. Ускорено уже по максимум (ранее выполнялось несколько суток).
-
> 1) Добавить в цикл Sleep
зачем? там же есть Application.ProcessMessages;
> 2) На время ожидания поднять формочку, в которой крутить мультики, с кнопкой отмена
тогда и смысл Application.ProcessMessages; пропадает, не говоря о Sleep ... он (цикл выборки) же уже там есть, если ShowModal...
бред какойто в общем советуешь...
если уж выполняется асинхронно то и смотреть событие завершения асинхронного запроса, по нему и форму "снимать", а больше ничего не надо, "подъемом" формы все и так прекрасно блокируется. и никаких циклов со слипами.
> Ускорено уже по максимум
уверен? а то судя по тому, что советуешь ...
> (ранее выполнялось несколько суток).
ну, это уж вообще не доказательство...
-
> включи полнотекстовый поиск (текст индексируется по словам
> из которых состоит) и ищи... быстро.
Кстати, о пцыцах.
А вот кок долго он будет строиться? (FTI)
Это нормально, что он у меня на 5.000.000 записей по прикидкам 2 суток будет строиться???
-
> Ega23 © (12.03.08 00:11) [11]
> А вот кок долго он будет строиться? (FTI)
Из практики - на P3 самом быстром на ~100 т.з. ~1 час.
-
> Ega23 © (12.03.08 00:11) [11]
Оффтоп по поводу русского языка. Но это нынче в моде.
Я бы написал "о пцицах". Или "о псИсах" :)
-
> Я бы написал "о пцицах". Или "о псИсах" :)
Откровенно говоря, не помню откуда это взялось.
Есть подозрение, что из грузинской рок-оперы "Муха Цокотуха". Очень интересное произведение было... :)
-
> зачем? там же есть Application.ProcessMessages;
Мало. Процессор все равно лопается. Sleep(200) или 100 - в самую тему там.
> ShowModal...
- единственный способ показать форму ? Кистате, я обычно просто кнопку "стоп" включаю на тулбаре - не нравятся мне модальные формы по делу и без.
> > Ускорено уже по максимум
> уверен? а то судя по тому, что советуешь ...
5 таблиц. в 1-й 20 000 000 записей. В остальных - примерно в 100 раз больше (истории всякие). Все сджойнить и сгруппировать.
Быстрее чем за полтора часа у меня не получилось. Если Вы сможете оптимизнуть круче - приходите к нам работать. Зарплатой мой начальник не обидит.
-
>> ShowModal...
> - единственный способ показать форму ?
не единственный, а разумный (!)... делать показ по другому (по вашему) только затем чтобы после делать "костыль" из цикла с ProcessMessages вместо стандартной выборки сообщений, делающий тоже самое только хуже, глупо.
> не нравятся мне модальные формы по делу и без.
ты советовал показать форму на время выполнения запроса, какая разница нравиться тебе ее показывать модально или нет если показать так проще (писать меньше) и лучше ("костылей" нет)?
(мне например вон with не нравиться... но если я считаю что код с ним будет лучше (уберет например лишнюю переменную), я его все одно использую. невзирая на личные предпочтения)
> 5 таблиц. в 1-й 20 000 000 записей.
ну, таких у меня рабочих нет, хотя пробовать пробовал.
даже расказывал тут както (можеш найти в дайджестах) про столкновение с ораклом, когда клиент на вопрос, а че так долго (2 часа) на хваленом "самом быстром"? сказал "так 40 миллионов записей в таблице"... типа это чтото доказывает. дома сделал тест с той же структурой, нагенерил теже 40 миллионов случайных значений и написал запрос на тот же результат (не оптимизировал, а написал с 0, т.к. сами ихние запросы мне никто не да (сам ради интереса проверял), результат у меня получился за секунды... чего они там оптимизировали и как ради 2х часов х.з. правда я поставил это в заслугу MSSQL-ю т.к. тестил на нем, а "оригинал" был на оракле.
> Все сджойнить и сгруппировать.
цель разве в этом? а если возможен тот же результат вообще без джойнов, или групп... засчитается? ;)
> Если Вы сможете оптимизнуть круче - приходите к нам работать.
вот чего я точно не могу, так это "лечить" по фотографии. (а данных приведено даже меньше чем на фотографии с пациента)
дай мне модель базы (части для которой запрос), и что делать (о чем запрос), и посмотрю, возможно оптимизировать или нет.
-
Кстати приведенный в начале пример не рабочий - States сразу после выполения запроса = stClose... Так что пока ищу варианты...
А по поводу оптимизации данных и выборки всего нескольких записей скажу: - есть ситуации когда необходимо бывает стянуть на клиента тысяч 50 записей или например произвезсти поиск содержимому BLOB поля (в этом случае случае я думаю вряд ли можно как нибудь оптимизировать запрос)
-
> произвезсти поиск содержимому BLOB поля
Full-text Search?
-
> есть ситуации когда необходимо бывает стянуть на клиента тысяч 50 записей
просто "стянуть" это даже секунду не займет, не то что время чтобы требовалась какаято особая обработка, типа формы на время выполнения... часиков в курсоре хватит.
(при приемлемом количестве полей в запросе разумеется, а то если "ширина" записи больше чем "высота" таблицы, тады ой...)
> в этом случае случае я думаю вряд ли можно как нибудь оптимизировать запрос
в этом случае нужно "оптимизировать" логику построения базы и работы с ней. ибо нефиг "поисковые" данные вкладывать внутрь BLOB полей.
> Full-text Search?
а если картинка, и поиск идет всех черных "пикселей"/группы... ? (в MSSQL блоб имеет название (тип) image, а текст так и есть text ...)