Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Всем привет...поможите PLZ
Проблема такая, выполняется следующий запрос:

select ID, SCHKOD, PLANID into #TMPACC from _1SACCS(NOLOCK) where PLANID=809
insert #TMPACC values(' 0 ', '', 809);

create unique index ID on #TMPACC(ID);
select ENTRY.* from _1SENTRY ENTRY(NOLOCK), #TMPACC DT(NOLOCK), #TMPACC KT(NOLOCK) where ENTRY.DATE_TIME_DOCID>='20040101 0 0 ' and ENTRY.DATE_TIME_DOCID<='20041001 0 0 ' and ENTRY.ACTIVE=' ' and ENTRY.ACCDTID=DT.ID and ENTRY.ACCKTID=KT.ID and (DT.SCHKOD>=' 44' and substring(DT.SCHKOD,1,3)=' 44' and DT.PLANID=809 and KT.SCHKOD>=' 70' and substring(KT.SCHKOD,1,3)=' 70' and KT.PLANID=809)

Все проходит нормально, но в результате строки постоянно меняются местами (т.е. при каждом новом запуске получается тот же набор, но строки выборки каждый раз меняются местами)
В таблице создан кластерныый индекс на поле DATE_TIME_DOCID с сортировкой по возрастанию, а в результате получается неотсортированная(точнее как-то странно сортированная выборка).
Добавление ORDER BY DATE_TIME_DOCID ASC в конце запроса дает нужный результат, но я не могу модифицировать запрос, т.к. он выполняется 1С.

Пробовал перестроить индексы базы,проверить-исправить ошибки в базе, тестировал исправлял базу средствами 1С, результат нулевой.

Подскажите в чем может быть трабл PLLLLLLLLLLLLZZZZ
13 окт 04, 23:39    [1031847]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Трабл в том, что наличие кластерного индекса не гарантирует упорядоченность выборки. Для получения таких гарантий нужно использовать ORDER BY.
14 окт 04, 05:14    [1031923]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Да, наличие или отсутствие какого либо индекса (и не только в MSSQL, но и во всех других SQL серверах) абсолютно не гарантирует упорядоченности возврата строк из запроса (да и не должно гарантировать) если это не определено специальной клаузой ORDER BY. Если нет возможности поправить запрос (а что мешает - 1С вроде как можно модифицировать), то - никак.
14 окт 04, 07:59    [1031991]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Но записи-то в таблице физически упорядочены по индексу!!!!! и почему тогда в выборке каждый раз строки местами меняются????
14 окт 04, 09:01    [1032102]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
S.W.A.T.
Но записи-то в таблице физически упорядочены по индексу!!!!! и почему тогда в выборке каждый раз строки местами меняются????

Потому что сервру было удобнее выбрать их именно так.
14 окт 04, 09:03    [1032109]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
tpg
а что мешает - 1С вроде как можно модифицировать


Просто этот запрос - метод объекта "операция"(ВыбратьОперацииСПроводками) в 1С, т.е. входит в функционал платформы и не является открытым
14 окт 04, 09:04    [1032114]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Гавриленко Сергей Алексеевич
S.W.A.T.
Но записи-то в таблице физически упорядочены по индексу!!!!! и почему тогда в выборке каждый раз строки местами меняются????

Потому что сервру было удобнее выбрать их именно так.


Потому что кластерный индекс физически упорядочил таблицу(задал явно - по возрастанию)

И почему в выборке КАЖДЫЙ раз строки местами меняются??? Этот вопрос больше всего волнует если честно
14 окт 04, 09:06    [1032122]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Ещё раз - как серверу одобно выбирать строки из таблицы, так он их и выбирает (ну хоть ты тут тресни) - пофигу ему как они хранятся, если не задан порядок в выборке.
А вместо ВыбратьОперацииСПроводками просто select... в 1С что написать что ли нельзя? Насколько я осведомлен об 1С - а можно.
14 окт 04, 09:10    [1032135]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Млиииин , но до вчерашнего дня все работало на ура, в другой базе на том же серваке точно такой же запрос выполняется как надо.
Да я могу использовать вместо ВыбратьОперацииСПроводками просто "select... ", но ведь это решает следствие проблемы, а не проблему, что не есть гуд, т.к. нет гарантии что также не отвалится еще что-нибудь :( :( :(
14 окт 04, 09:13    [1032146]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
S.W.A.T.
Млиииин , но до вчерашнего дня все работало на ура, в другой базе на том же серваке точно такой же запрос выполняется как надо.
Да я могу использовать вместо ВыбратьОперацииСПроводками просто "select... ", но ведь это решает следствие проблемы, а не проблему, что не есть гуд, т.к. нет гарантии что также не отвалится еще что-нибудь :( :( :(
На самом деле проблеммы то никакой и нет - есть просто непонимание самой сути SQL. А гарантия есть - как ни банально, это ORDER BY.
14 окт 04, 09:16    [1032152]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Хорошо, я согласен с серевером дружу достаточно недавно :))

Но почему строки до вчерашеного дня выбираль как надо т.е. упорядоченно по индексу, а сейчас скачут при каждом обращении??? Что это может быть, где смотреть(читать)?
14 окт 04, 09:18    [1032163]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
S.W.A.T.
Хорошо, я согласен с серевером дружу достаточно недавно :))

Но почему строки до вчерашеного дня выбираль как надо т.е. упорядоченно по индексу, а сейчас скачут при каждом обращении??? Что это может быть, где смотреть(читать)?

Потому что изменился план запроса. Или каждый раз меняется.
14 окт 04, 09:20    [1032169]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Гавриленко Сергей Алексеевич
S.W.A.T.
Хорошо, я согласен с серевером дружу достаточно недавно :))

Но почему строки до вчерашеного дня выбираль как надо т.е. упорядоченно по индексу, а сейчас скачут при каждом обращении??? Что это может быть, где смотреть(читать)?

Потому что изменился план запроса. Или каждый раз меняется.


Меняется каждый раз ((
Я просто не пойму почему такое произошло :((
14 окт 04, 09:22    [1032177]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
S.W.A.T.
Гавриленко Сергей Алексеевич
S.W.A.T.
Хорошо, я согласен с серевером дружу достаточно недавно :))

Но почему строки до вчерашеного дня выбираль как надо т.е. упорядоченно по индексу, а сейчас скачут при каждом обращении??? Что это может быть, где смотреть(читать)?

Потому что изменился план запроса. Или каждый раз меняется.


Меняется каждый раз ((
Я просто не пойму почему такое произошло :((

План запроса зависит в том числе и от данных. Вернее, от их распределения. Вернее, от статистики. И от объема. Пишите order by.
14 окт 04, 09:23    [1032183]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
Или стоит пошукать в недрах 1С возможность упорядочивания набора строк.
14 окт 04, 09:24    [1032184]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Йееееех я бы поправил запрос....но к сожалению это не так просто :(
Функции работы с базой находятся в DLL, вытащить их оттуда не так просто :( , а время поджимает :(
14 окт 04, 09:29    [1032200]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Народ еще одна особенность - при копировании базы на другой сервак(тоже MSSQL2000 + SP3), все работает отлично !!!!!!!
14 окт 04, 10:15    [1032396]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23903
... до поры, до времени...
14 окт 04, 10:18    [1032417]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
tpg
... до поры, до времени...


Млин ну ведь наверняка есть решение и на этом серваке без модификации запроса
14 окт 04, 10:21    [1032441]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
S.W.A.T.
tpg
... до поры, до времени...


Млин ну ведь наверняка есть решение и на этом серваке без модификации запроса

Ага. Открываем курсор (хоть на сервере, хоть на клиенте) и пузырьком ...
14 окт 04, 10:24    [1032457]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Glory
Member

Откуда:
Сообщений: 104764
Млин ну ведь наверняка есть решение и на этом серваке без модификации запроса
Правильное решение со 100% гарантией - использовние ORDER BY.
Можно попробовать делать запрос из представления, в которм уже будет содержаться запрос с ORDER BY. Правда опять же без 100% гарантии.
14 окт 04, 10:26    [1032463]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Гавриленко Сергей Алексеевич
S.W.A.T.
tpg
... до поры, до времени...


Млин ну ведь наверняка есть решение и на этом серваке без модификации запроса

Ага. Открываем курсор (хоть на сервере, хоть на клиенте) и пузырьком ...


:) HeapSort рулит :)) ....и все-таки при копировании базы все стало нормально, значит и в исходной базе можно получить такой-же результат
14 окт 04, 10:27    [1032468]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Glory
Member

Откуда:
Сообщений: 104764
и все-таки при копировании базы все стало нормально, значит и в исходной базе можно получить такой-же результат
Ага и вместо того чтобы один раз задать ORDER BY напишем скрипт который будет периодически копировать базу туда-сюда ?
14 окт 04, 10:30    [1032479]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
S.W.A.T.
Member

Откуда: Санкт-Петербург
Сообщений: 23
Glory
Млин ну ведь наверняка есть решение и на этом серваке без модификации запроса
Правильное решение со 100% гарантией - использовние ORDER BY.
Можно попробовать делать запрос из представления, в которм уже будет содержаться запрос с ORDER BY. Правда опять же без 100% гарантии.


Согласен самое правильное, еще бы это понимали программеры, которые писали сиквельную часть 1С

Народ, я же говорю запрос переделать я не могу, точнее могу, но это займет слишком много времени....да и незаконно это....представление использовать конечно могу, но тут надо подумать....собсно это вобщем-то приемлимый способ
14 окт 04, 10:32    [1032488]     Ответить | Цитировать Сообщить модератору
 Re: Трабл c запросом....  [new]
Lucifer
Member

Откуда: Лисичанск
Сообщений: 335

>"S.W.A.T." <nospam@sql.ru> сообщил/сообщила в новостях следующее: news:1031847@sql.ru...
>Всем привет...поможите PLZ
>Проблема такая, выполняется следующий запрос:

>...

>Подскажите в чем может быть трабл PLLLLLLLLLLLLZZZZ



1. а что возвратит exec sp_autostats 'имя таблицы'.
2. попробуйте вручную перестроить статистику на таблицах попадающих в запрос.
3. пересоздайте кластерный индекс с опцией DROP_EXISTING

хотя, если это и поможет. то не на долго. :-(. Вас спасет только ORDER BY.

Posted via ActualForum NNTP Server 1.0

14 окт 04, 12:42    [1033394]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить