Время выполнения update в 8.10 MS SQL
-
- заказчик
- Сообщения: 178
- Зарегистрирован: Чт, 20/09/2007 07:40
- Имя Фамилия: Михаил Львович
- Откуда: Мелькомбинат
- Контактная информация:
Время выполнения update в 8.10 MS SQL
Время выполнения данного update в версии 5.8502 (MS SQL) не превышало 10 минут, в версии 8.1 выполняется 20 минут. Из за чего непонятно, может быть мы что-то не так написали? Будем благодарны за помощь.
update in soprhoz
where ((soprhoz.cstepdoc==stepdoc.nrec and stepdoc.cbasedoc==basedoc.nrec and
soprhoz.csoprdoc==plpor.nrec)) and
soprhoz.summa>0 and
(soprhoz.tidkgal=2 or soprhoz.tidkgal=7 or (soprhoz.tidkgal=10 and soprhoz.modedoc=1024)) and
basedoc.ddoc>plpor.datob and soprhoz.datob<>basedoc.ddoc
set soprhoz.datob:=basedoc.ddoc;
update in soprhoz
where ((soprhoz.cstepdoc==stepdoc.nrec and stepdoc.cbasedoc==basedoc.nrec and
soprhoz.csoprdoc==plpor.nrec)) and
soprhoz.summa>0 and
(soprhoz.tidkgal=2 or soprhoz.tidkgal=7 or (soprhoz.tidkgal=10 and soprhoz.modedoc=1024)) and
basedoc.ddoc>plpor.datob and soprhoz.datob<>basedoc.ddoc
set soprhoz.datob:=basedoc.ddoc;
-
- топ-софт
- Сообщения: 566
- Зарегистрирован: Пт, 21/09/2007 15:19
- Имя Фамилия: Фёдор Терсин
- Откуда: Галактика Софт
- Контактная информация:
noindex надо использовать если нет подходящих индексов
в принципе, механизм подбора индексов анализирует и условия с noindex, просто они не являются обязательными
понятно, что раз условия на корневую таблицу, то накладывать их надо через root
но, опять таки, если наложить логическое выражение через or, то оно на сервер не уйдёт, а будет обрабатываться на клиенте
через == условия по or наложить нельзя
так что остаётся разбить запрос на несколько, по количеству or'ов, в каждом из которых подцепить root по ==
а уж с noindex или без - это надо бд смотреть, есть там подходящий индекс или нет
в принципе, механизм подбора индексов анализирует и условия с noindex, просто они не являются обязательными
понятно, что раз условия на корневую таблицу, то накладывать их надо через root
но, опять таки, если наложить логическое выражение через or, то оно на сервер не уйдёт, а будет обрабатываться на клиенте
через == условия по or наложить нельзя
так что остаётся разбить запрос на несколько, по количеству or'ов, в каждом из которых подцепить root по ==
а уж с noindex или без - это надо бд смотреть, есть там подходящий индекс или нет
-
- заказчик
- Сообщения: 117
- Зарегистрирован: Пт, 26/10/2007 14:16
- Имя Фамилия: Денис Кучин
- Откуда: Геомостпроект НПО
cruger писал(а): ....понятно, что раз условия на корневую таблицу, то накладывать их надо через root
но, опять таки, если наложить логическое выражение через or, то оно на сервер не уйдёт, а будет обрабатываться на клиенте
через == условия по or наложить нельзя
так что остаётся разбить запрос на несколько, по количеству or'ов, в каждом из которых подцепить root по ==
а уж с noindex или без - это надо бд смотреть, есть там подходящий индекс или нет
Ну уж о таких нюансах тока из Ваших уст можно узнать, Федор.
Я дак думал что на Root анализируются необходимые условия и только при наступлении оного далее проверяется вся совокупность == во where(( )) между таблицами. Оказывается немножко не так (
-
- партнер
- Сообщения: 85
- Зарегистрирован: Чт, 20/09/2007 12:53
- Имя Фамилия: Алексей Семенов
- Откуда: ЭП-Аудит
- Контактная информация:
В данном пируете с данными нет необходимости при должной настройке системы.
Проводки по зачету аванса нада делать в накладной.
Но все же, если вам уж очень нада, то лучше использовать функционал ТХО. В 8.10 есть функция которая может проставить дату в проводку:
TxoSetDate - Заполнить значение даты.
О его использовании надо в другую ветку.
Проводки по зачету аванса нада делать в накладной.
Но все же, если вам уж очень нада, то лучше использовать функционал ТХО. В 8.10 есть функция которая может проставить дату в проводку:
TxoSetDate - Заполнить значение даты.
О его использовании надо в другую ветку.
-
- топ-софт
- Сообщения: 566
- Зарегистрирован: Пт, 21/09/2007 15:19
- Имя Фамилия: Фёдор Терсин
- Откуда: Галактика Софт
- Контактная информация:
root - это способ указать для корневой таблицы запроса что-то такое, что для подцепляемой указывается при подцепке
а при подцепке обычно указываются фильтры, которые накладываются именно на узел
zzz == table.field and
(filter_condition)
и вот если на корень ограничений никаких нет, то как указать узловой фильтр? только через root
но в случае с noindex (или индексной подцепкой), очевидно, root не нужен
зы. есть условия, которые проверяются до навигации по таблицам
указываются они в фильтре на всю логическую таблицу
из всех наложенных там фильтров выбираются те, которые никак не зависят от узлов, и вот они-то и проверяются перед навигацией (в данном случае речь идёт о навигации по всей лт, а не по отдельным узлам)
а при подцепке обычно указываются фильтры, которые накладываются именно на узел
zzz == table.field and
(filter_condition)
и вот если на корень ограничений никаких нет, то как указать узловой фильтр? только через root
но в случае с noindex (или индексной подцепкой), очевидно, root не нужен
зы. есть условия, которые проверяются до навигации по таблицам
указываются они в фильтре на всю логическую таблицу
из всех наложенных там фильтров выбираются те, которые никак не зависят от узлов, и вот они-то и проверяются перед навигацией (в данном случае речь идёт о навигации по всей лт, а не по отдельным узлам)