powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / NAV, SQL 2000 и оптимизатор запросов
54 сообщений из 54, показаны все 3 страниц
NAV, SQL 2000 и оптимизатор запросов
    #36838289
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем - здравствовать!

Очень непонятная проблема съедает мозг.
Есть NAV (бывш. Navision, вдруг если кто не знает это ERP такая).
База живёт на SQL 2000, огромная - терабайт.

Есть некая таблица (339, для тех кто NAV знает).
В таблице в NAV есть ключ "Примен.-к Операции Но.,Примен.-из Операции Но.".
Галка "maintain SQL index" установлена, ключ в SQL присутствует, ключ не битый.

По этому ключу в NAV делается выборка рекордсета:

Код: plaintext
1.
2.
3.
4.
RESET;
SETCURRENTKEY("Примен.-к Операции Но.","Примен.-из Операции Но.");
SETFILTER("Примен.-к Операции Но.",'<>0');
SETRANGE("Примен.-из Операции Но.", 30195 );
IF FIND('-') THEN..........

В "родной" БД, и вообще на всех SQL-базах, с которыми я в жизни имел дело, такой запрос выполняется моментально, ибо фильтры кладутся по ключу. В этой базе, выполнение выборки занимает МИНУТУ.

Стал искать, в чём дело. Выполнил код под монитором клиента (для не-навиженологов, это такая штука, в которой можно посмотреть на кишки выполняющегося процесса, своего рода дебаггер). Увидел следующее (очень извиняюсь за нечитабельный вид):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Имя функции	Номер параметра	 Параметр	Номер	Данные
FIND/NEXT	 1 	Table	 339 	Товар Книга Применения
FIND/NEXT	 2 	Search Method		-
FIND/NEXT	 3 	Key		Примен.-к Операции Но.,Примен.-из Операции Но.,Операция Но.
FIND/NEXT	 6 	Filter		Примен.-к Операции Но.:<> 0 , Примен.-из Операции Но.: 30195 
FIND/NEXT	 14 	Source Object		Report  57000  Исправление Применений
FIND/NEXT	 15 	Source Trigger/Function		ОбработатьРасход(Товар Книга Операций)
FIND/NEXT	 16 	Source Line No.	 211 	
FIND/NEXT	 17 	Source Text		IF Debugmode THEN
FIND/NEXT	 30 	SQL Statement		SELECT  * FROM "Основная БД для тестирования$Товар Книга Применения" WITH (READUNCOMMITTED)   WHERE (("Примен.-к Операции Но."<> 0 )) AND (("Примен.-из Операции Но."= 30195 )) ORDER BY "Примен.-к Операции Но.","Примен.-из Операции Но.","Операция Но." 
FIND/NEXT	 31 	SQL Plan		Sort[ 2 , 1 ];Filter[ 3 , 2 ];Nested Loops[ 4 , 3 ];Index Seek($ 5 )[ 6 , 4 ];Clustered Index Seek(Основная БД для тестирования$Товар Книга Применения$ 0 )[ 8 , 4 ]
FIND/NEXT	 32 	SQL Index		Примен.-из Операции Но.,Операция Но.
FIND/NEXT	 50 	Search Result		
FIND/NEXT	 100 	Elapsed Time (ms)	 54039 	

Говоря по-русски, получается следующее: из NAV в SQL передаётся совершенно правильный, нормальный запрос:

Код: plaintext
SELECT  * FROM "Основная БД для тестирования$Товар Книга Применения" WITH (READUNCOMMITTED)   WHERE (("Примен.-к Операции Но."<> 0 )) AND (("Примен.-из Операции Но."= 30195 )) ORDER BY "Примен.-к Операции Но.","Примен.-из Операции Но.","Операция Но." 

Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.

Самое интересное, что если этот же запрос выполнить непосредственно в SQL, результаты возвращаются моментально.

Подозреваем, что косячит оптимизатор запросов, но точно определить не можем, и обойти тоже не знаем как. Мы в полном ступоре. Помогите понять, в чём дело?

Если вдруг будет нужно - можно мне звонить (903)5672441 для оперативности, приму любую помощь.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838306
petsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое интересное, что если этот же запрос выполнить непосредственно в SQL, результаты возвращаются моментально.

Хм.. А тут почему оптимизатор не косячит?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838313
petsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще запросы к SQL-серверу надо профайлером смотреть. Это будет запрос, который получает сервер.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838314
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
petsaСамое интересное, что если этот же запрос выполнить непосредственно в SQL, результаты возвращаются моментально.

Хм.. А тут почему оптимизатор не косячит?
Понятия не имею. Честно говоря, я SQL практически не знаю. Потому и прошу совета, у меня идей нет.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838318
_djХомяГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы уверены , что из Navision данный select передаётся в том же виде, что и из MS SQL (кстати это можно посмотреть профайлером) Подозреваю , что в случае с Navision на сервер передаётся что то типа sp_executesql или нечто похожее.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838320
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech

Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.

Это вы про план выпроления что ли ?


anatoleech
Самое интересное, что если этот же запрос выполнить непосредственно в SQL, результаты возвращаются моментально.

Подозреваем, что косячит оптимизатор запросов, но точно определить не можем, и обойти тоже не знаем как. Мы в полном ступоре. Помогите понять, в чём дело?

Если вдруг будет нужно - можно мне звонить (903)5672441 для оперативности, приму любую помощь.
На план выполнения могут оказать влияние настройки SET коннекта
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838326
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_djХомяГВы уверены , что из Navision данный select передаётся в том же виде, что и из MS SQL (кстати это можно посмотреть профайлером) Подозреваю , что в случае с Navision на сервер передаётся что то типа sp_executesql или нечто похожее.
Спасибо, попробуем.
Но тем не менее, факт что SQL использует левый ключ вместо конкретно указанного.
Почему, как бороться, в чём причины могут быть?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838330
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Но при этом в SQL почему-то выборка выполняется по уродскому ключу
> Примен.-из Операции Но.,Операция Но., что естественно приводит к
> фильтрации по неключевому полю с 54-секундным выполнением.

гм. не объясните, почему вы считаете, что для вашего запроса должен использоваться
ключ (Примен.-к Операции Но.,Примен.-из Операции Но.), а не (Примен.-из Операции Но.,Операция Но.)

лично на мой взгляд выбор сервера вполне логичен.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838340
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryanatoleech

Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.

Это вы про план выпроления что ли ?

Это то, что я вижу в мониторе клиента в навижене. В SQL ушёл вполне определённый запрос, а выполняется он по другому ключу.

Glory
anatoleech
Самое интересное, что если этот же запрос выполнить непосредственно в SQL, результаты возвращаются моментально.

Подозреваем, что косячит оптимизатор запросов, но точно определить не можем, и обойти тоже не знаем как. Мы в полном ступоре. Помогите понять, в чём дело?

На план выполнения могут оказать влияние настройки SET коннекта
Не-не-не, тут никакого коннекта не SET, это не вызов процедур, это выборка, которая производится навиженом из своей же базы данных.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838344
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechGloryanatoleech

Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.

Это вы про план выпроления что ли ?

Это то, что я вижу в мониторе клиента в навижене. В SQL ушёл вполне определённый запрос, а выполняется он по другому ключу.

Что такое "выполняется по ключу" в терминах MSSQL?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838349
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech
Не-не-не, тут никакого коннекта не SET, это не вызов процедур, это выборка, которая производится навиженом из своей же базы данных.
Это как - запрос выполняется, а коннекта к серверу нет ? А как тогда без коннекта запрос вообще попадает на сервер ?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838351
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в профайлере конекшен сеттинги сравните. а после в квере поставьте себе сеттинги нава и повторите запрос. скорее всего и поведение запроса изменится.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838362
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daw
> Но при этом в SQL почему-то выборка выполняется по уродскому ключу
> Примен.-из Операции Но.,Операция Но., что естественно приводит к
> фильтрации по неключевому полю с 54-секундным выполнением.

гм. не объясните, почему вы считаете, что для вашего запроса должен использоваться
ключ (Примен.-к Операции Но.,Примен.-из Операции Но.), а не (Примен.-из Операции Но.,Операция Но.)

лично на мой взгляд выбор сервера вполне логичен.


Не логичен.

Вот код, который выполняется в NAV:

Код: plaintext
1.
2.
3.
4.
5.
RESET;
SETCURRENTKEY("Примен.-к Операции Но.","Примен.-из Операции Но.");
SETFILTER("Примен.-к Операции Но.",'<>0');
SETRANGE("Примен.-из Операции Но.", 30195 );
IF FIND('-') THEN..........
Обратите внимание на ключ и на фильтры.

Вот запрос, который уходит в SQL:
Код: plaintext
SELECT  * FROM "Основная БД для тестирования$Товар Книга Применения" WITH (READUNCOMMITTED)   WHERE (("Примен.-к Операции Но."<> 0 )) AND (("Примен.-из Операции Но."= 30195 )) ORDER BY "Примен.-к Операции Но.","Примен.-из Операции Но.","Операция Но." 
Обратите внимание на ключ и на фильтры.

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

Логично было бы взять конкретно указанный ключ с обоими фильтруемыми полями, а SQL предпочитает почему-то брать ключ с одним полем, что неправильно.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838369
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryanatoleechGloryanatoleech

Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.

Это вы про план выпроления что ли ?

Это то, что я вижу в мониторе клиента в навижене. В SQL ушёл вполне определённый запрос, а выполняется он по другому ключу.

Что такое "выполняется по ключу" в терминах MSSQL?

мм.... не имею ни малейшего понятия, что это в индексах MSSQL :(
Подозреваю, что это может называться как-то вроде "использования индекса" или "использования ключа".
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838378
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech
Логично было бы взять конкретно указанный ключ с обоими фильтруемыми полями, а SQL предпочитает почему-то брать ключ с одним полем, что неправильно.
И где вы видите, что сервер делает по-другому ?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838396
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech не имею ни малейшего понятия, что это в индексах MSSQL :(
Подозреваю, что это может называться как-то вроде "использования индекса" или "использования ключа".
И еще раз - где вы видите, _как_ MSSQL выполняет ваш запрос в обеих случаях ?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838397
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Обратите внимание на ключ и на фильтры.
>
> Фильтрация по двум полям, оба поля входят в составной ключ из двух полей
> (не считая первичного ключа), а используется ключ из одного поля (не
> считая первичного ключа).
>
> Логично было бы взять конкретно указанный ключ с обоими фильтруемыми
> полями, а SQL предпочитает почему-то брать ключ с одним полем, что
> неправильно.

а вы вообще представляете себе, как индексы устроены и как поиск по индексу происходит?
я сильно подозреваю, что строк, для которых "Примен.-к Операции Но."<>0
гооораздо больше, чем тех, для которых "Примен.-из Операции Но."=30195
поправьте, если это не так. а если так, то эффективнее будет индекс, где
"Примен.-из Операции Но." стоит первым в списке ключевых столбцов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838403
_djХомяГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор
Но при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Н

ААА вообще то сервак делает правильно ("Примен.-из Операции Но."=30195)является sarga'ble , а вот римен.-к Операции Но.",'<>0' - нет
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838408
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryanatoleech
Не-не-не, тут никакого коннекта не SET, это не вызов процедур, это выборка, которая производится навиженом из своей же базы данных.
Это как - запрос выполняется, а коннекта к серверу нет ? А как тогда без коннекта запрос вообще попадает на сервер ?
Потому что это и есть сервер навижена. Навижен шурует в своей же базе, своими же средствами, он к ней уже подключен. Вряд ли смогу внятно более объяснить - это чёрный ящик.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838413
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechФильтрация по двум полям, оба поля входят в составной ключ из двух полей (не считая первичного ключа), а используется ключ из одного поля (не считая первичного ключа).

Логично было бы взять конкретно указанный ключ с обоими фильтруемыми полями, а SQL предпочитает почему-то брать ключ с одним полем, что неправильно.Странно, вы же написали, что как раз сервер использует индекс с двумя полями, как и должно быть:anatoleechНо при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.
Вам нужно освоить терминологию, профпайлер и вообще SQL Server, или привлечь соответствующего специалиста.
Без этого не получится, или будет очень долго.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838414
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сколько у вас (в процентах от общего количества) строк, где "Примен.-к Операции Но."<>0
и сколько таких, где "Примен.-из Операции Но."=30195 ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838416
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryanatoleech не имею ни малейшего понятия, что это в индексах MSSQL :(
Подозреваю, что это может называться как-то вроде "использования индекса" или "использования ключа".
И еще раз - где вы видите, _как_ MSSQL выполняет ваш запрос в обеих случаях ?
В мониторе клиента. Это собственное средство NAV.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838419
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechGloryanatoleech
Не-не-не, тут никакого коннекта не SET, это не вызов процедур, это выборка, которая производится навиженом из своей же базы данных.
Это как - запрос выполняется, а коннекта к серверу нет ? А как тогда без коннекта запрос вообще попадает на сервер ?
Потому что это и есть сервер навижена. Навижен шурует в своей же базе, своими же средствами, он к ней уже подключен. Вряд ли смогу внятно более объяснить - это чёрный ящик.
Какой нафиг ящик
Нельзя выполнить никакой команды на MSSQL без создания коннекта к нему
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838444
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvganatoleechФильтрация по двум полям, оба поля входят в составной ключ из двух полей (не считая первичного ключа), а используется ключ из одного поля (не считая первичного ключа).

Логично было бы взять конкретно указанный ключ с обоими фильтруемыми полями, а SQL предпочитает почему-то брать ключ с одним полем, что неправильно.Странно, вы же написали, что как раз сервер использует индекс с двумя полями, как и должно быть:anatoleechНо при этом в SQL почему-то выборка выполняется по уродскому ключу Примен.-из Операции Но.,Операция Но., что естественно приводит к фильтрации по неключевому полю с 54-секундным выполнением.
Вам нужно освоить терминологию, профпайлер и вообще SQL Server, или привлечь соответствующего специалиста.
Без этого не получится, или будет очень долго.

Должно быть "Применено-к, применено-из". Используется "Применено-из".
Терминологию осваивать нет резона, да и некогда. При работе с sqlной базой NAV, с SQL обычно приходится иметь дело просто на уровне администрирования.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838449
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechПри работе с sqlной базой NAV, с SQL обычно приходится иметь дело просто на уровне администрирования.
Т.е. вы сидите в какой-то утилите Navison и считаете, что она вам показывает то, что действительно происходит на MSSQL сервере ?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838457
_djХомяГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anatoleech
Должно быть "Применено-к, применено-из". Используется "Применено-из".
Терминологию осваивать нет резона, да и некогда. При работе с sqlной базой NAV, с SQL
Раз должно быть - делайте каким то образом (каким не знаю и вряд ли это поддерживается, хотя всё возможно) при формировании выборки хинт по "нужному" индексу в Nav
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838469
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryanatoleechGloryanatoleech
Не-не-не, тут никакого коннекта не SET, это не вызов процедур, это выборка, которая производится навиженом из своей же базы данных.
Это как - запрос выполняется, а коннекта к серверу нет ? А как тогда без коннекта запрос вообще попадает на сервер ?
Потому что это и есть сервер навижена. Навижен шурует в своей же базе, своими же средствами, он к ней уже подключен. Вряд ли смогу внятно более объяснить - это чёрный ящик.
Какой нафиг ящик
Нельзя выполнить никакой команды на MSSQL без создания коннекта к нему
Чёрный нафиг ящик.
Коннект создаёт NAV, при открытии БД клиентом. Как это происходит - неведомо.
Короче говоря, никаких специальных действий для этого делать не нужно.

У нас большая проблема из-за различной терминологии - Вы с NAV не знакомы, а я SQL умею только поверхностно администрировать. Прошу поэтому проявить терпение. Несмотря на то, что NAV умеет жить на SQL-сервере, это никак не влияет на среду разработки и поведение клиента NAV. Поэтому SQL я почти не знаю, хотя с ADO бывает что работаю - например, если надо выполнить хранимую процедуру. Так вот, в случае использования ADO - да, надо создавать connection, как положено. А в моём случае - я пишу код в NAV, а что он там потом с ним делает - никогда задумываться не приходилось, потому что такое поведение вижу впервые за 5 лет практики. Прошу простить, что я не гуру в SQL, и помочь в решении этой проблемы.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838479
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech

У нас большая проблема из-за различной терминологии - Вы с NAV не знакомы, а я SQL умею только поверхностно администрировать. Прошу поэтому проявить терпение. Несмотря на то, что NAV умеет жить на SQL-сервере, это никак не влияет на среду разработки и поведение клиента NAV. Поэтому SQL я почти не знаю, хотя с ADO бывает что работаю - например, если надо выполнить хранимую процедуру. Так вот, в случае использования ADO - да, надо создавать connection, как положено. А в моём случае - я пишу код в NAV, а что он там потом с ним делает - никогда задумываться не приходилось, потому что такое поведение вижу впервые за 5 лет практики. Прошу простить, что я не гуру в SQL, и помочь в решении этой проблемы.
Вы какую область собираетесь обсуждать в данной теме - все же MSSQL или Navision ?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838482
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GloryanatoleechПри работе с sqlной базой NAV, с SQL обычно приходится иметь дело просто на уровне администрирования.
Т.е. вы сидите в какой-то утилите Navison и считаете, что она вам показывает то, что действительно происходит на MSSQL сервере ?
Ну как бы да. И что самое удивительное - показывает.
За "какую-то утилиту" - ей-богу, спасибо, чтоб так опускали Microsoft Dynamics NAV я ещё ни разу не видел, надо будет запомнить, фраза шикарна.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838489
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechНу как бы да. И что самое удивительное - показывает.
За "какую-то утилиту" - ей-богу, спасибо, чтоб так опускали Microsoft Dynamics NAV я ещё ни разу не видел, надо будет запомнить, фраза шикарна.Я тоже первый раз слышу про эту утилиту, например. Так что пожалуйста.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838497
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_djХомяГanatoleech
Должно быть "Применено-к, применено-из". Используется "Применено-из".
Терминологию осваивать нет резона, да и некогда. При работе с sqlной базой NAV, с SQL
Раз должно быть - делайте каким то образом (каким не знаю и вряд ли это поддерживается, хотя всё возможно) при формировании выборки хинт по "нужному" индексу в Nav
Собственно, это и делает оператор SETCURRENTKEY - указывает ключ для сортировки и фильтрации.
В SQL должен использоваться аналогичный ключ, создаваемый NAV в SQL при установке галки "Maintain SQL index" в списке ключей таблицы. Я так понимаю, что передаваемый SELECT, содержащий ORDER BY, соответствующий выбранному ключу, как раз-таки должен побудить SQL использовать этот ключ (поправьте, если это не так и ORDER BY выполняет функцию, отличную от выбора ключа).
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838500
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Самое интересное, что если этот же запрос выполнить непосредственно в
> SQL, результаты возвращаются моментально.

а, кстати, план какой в этом случае получается?
как план получить тут сказано: http://www.sql.ru/faq/faq_topic.aspx?fid=393

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838508
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
daw
> Самое интересное, что если этот же запрос выполнить непосредственно в
> SQL, результаты возвращаются моментально.

а, кстати, план какой в этом случае получается?
как план получить тут сказано: http://www.sql.ru/faq/faq_topic.aspx?fid=393



План это не вот это, случайно?
Код: plaintext
1.
SQL Plan		Sort[ 2 , 1 ];Filter[ 3 , 2 ];Nested Loops[ 4 , 3 ];Index Seek($ 5 )[ 6 , 4 ];Clustered Index Seek(Основная БД для тестирования$Товар Книга Применения$ 0 )[ 8 , 4 ]
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838512
Воттераз
А если заменить это
Код: plaintext
SETCURRENTKEY("Примен.-к Операции Но.","Примен.-из Операции Но.");
на это
Код: plaintext
SETCURRENTKEY("Примен.-из Операции Но.","Примен.-к Операции Но.");
лучше не становится?
p.s. по Навижну не спец

Авоттедва
Вы можете как-нибудь управлять параметрами подключения из Навижна? Только Сервер+БД или доступны ещё какие параметры?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838517
_djХомяГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
anatoleechЯ так понимаю, что передаваемый SELECT, содержащий ORDER BY, соответствующий выбранному ключу, как раз-таки должен побудить SQL использовать этот ключ (поправьте, если это не так и ORDER BY выполняет функцию, отличную от выбора ключа).
Всё зависит от стратегии выбранной оптимизатором , которая направлена на уменьшение "стоимости" (накладных расходов). Опять таки не понятно - что передаётся на сервер (это надо смотреть профайлером - серверная утилита)
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838522
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> План это не вот это, случайно?

этот я уже видел. по-моему, он вполне оправдан. ну, разве что вы попали
в ситуацию, когда скан кластерного индекса, на самом деле, лучше, чем
поиск по некластерному + букмарк лукап.
вы утверждаете, что "если этот же запрос выполнить непосредственно в SQL,
результаты возвращаются моментально." непосредсвенно в SQL - это вы query analyser
в виду имеете? вот и интересно сравнить планы.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838523
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
любитель навижнаВоттераз
А если заменить это
Код: plaintext
SETCURRENTKEY("Примен.-к Операции Но.","Примен.-из Операции Но.");
на это
Код: plaintext
SETCURRENTKEY("Примен.-из Операции Но.","Примен.-к Операции Но.");
лучше не становится?
p.s. по Навижну не спец

Авоттедва
Вы можете как-нибудь управлять параметрами подключения из Навижна? Только Сервер+БД или доступны ещё какие параметры?

По раз - не выйдет, потому что порядок полей в ключе строго фиксированный, это надо создавать ещё один ключ, а это проблематично по административным причинам (требование клиента "ключи не трогать").
По два - никак. При подключении только сервер, БД, тип подключения (TCP и т.д.), тип аутентификации (БД/windows), логин да пароль.

Модератор: Тема перенесена из форума "Microsoft SQL Server".
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838536
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechПри работе с sqlной базой NAV, с SQL обычно приходится иметь дело просто на уровне администрирования.Ну вот я про это и говорю - для администрирования нужен администратор.

Нужно посмотреть, что именно шлёт NAV сиквелу, какие настройки коннектов, почему такая разница при запросах из NAV и из SSMS, какие планы запросов, не поможет ли обновление статистики, посмотреть на рекомендации SSMS при анализе планов.

Это всё и делает администратор, DBA, а у вас такого нету.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838544
anatoleechПо раз - не выйдет
Я таки дико извиняюсь за настойчивость, но Вы пробовали?

Enterprise Manager'ом пользоваться умеете? В части открыть список таблиц и найти нужную? (да/нет)

И ещё. Судя по всему Вы сейчас на тестовой БД. Такая ситуация и на тесте и в проме?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838548
Balbidon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант, просто обновить статистику по базе?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838560
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BalbidonКак вариант, просто обновить статистику по базе?
Делали. Не помогло.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838577
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
любитель навижнаanatoleechПо раз - не выйдет
Я таки дико извиняюсь за настойчивость, но Вы пробовали?

Enterprise Manager'ом пользоваться умеете? В части открыть список таблиц и найти нужную? (да/нет)

И ещё. Судя по всему Вы сейчас на тестовой БД. Такая ситуация и на тесте и в проме?
Не пробовал, потому что это повлечёт за собой перестройку ключа, что недопустимо (он используется много где, и должен быть). Либо создание нового ключа. А нужно использовать имеющийся. Размер базы не располагает к экспериментам, а на проме проверить это нереально. Но объект в проме такой же.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838593
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
daw и _djХомяГ в 16:34 вам уже дали исчерпывающий ответ. Почитайте их топики еще раз.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838628
anatoleech
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто просил план запроса при выполнении запроса напрямую из SQL:

Код: plaintext
1.
2.
3.
4.
5.
|--Sort(ORDER BY[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Примен.-к Операции Но.] ASC, [GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Операция Но.] ASC))
       |--Filter(WHERE[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Примен.-к Операции Но.]<(0) OR [GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Примен.-к Операции Но.]>(0)))
            |--Nested Loops(Inner Join, OUTER REFERENCES[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Операция Но.]) OPTIMIZED)
                 |--Index Seek(OBJECT[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[$6]), SEEK[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Примен.-из Операции Но.]43238)) ORDERED FORWARD)
                 |--Clustered Index Seek(OBJECT[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения].[Основная БД для тестирования$Товар Книга Применения$0]), SEEK[GSTEST-SQL].[dbo].[Основная БД для тестирования$Товар Книга Применения
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838673
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleechКто просил план запроса при выполнении запроса напрямую из SQL:

это вот: [Основная БД для тестирования$Товар Книга Применения].[$6]
что за индекс?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36838697
Фотография daw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и, вообще, что там за индексы есть?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select 
  i.name 
  , sc.name
  , ik.keyno
  , indexproperty(i.id, i.name, 'IsClustered')
from sysindexes i
  inner join sysindexkeys ik on
    i.id = ik.id
    and i.indid = ik.indid
  inner join syscolumns sc on
    ik.id = sc.id
    and ik.colid = sc.colid
where 
  i.id = object_id('[dbo].[Основная БД для тестирования$Товар Книга Применения]')
order by
  i.id
  , ik.keyno
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839417
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dawя сильно подозреваю, что строк, для которых "Примен.-к Операции Но."<>0
гооораздо больше, чем тех, для которых "Примен.-из Операции Но."=30195
поправьте, если это не так. а если так, то эффективнее будет индекс, где
"Примен.-из Операции Но." стоит первым в списке ключевых столбцов.
Скорее всего всё именно так. Вот только не имеет никакого значения, в какой последовательности стоят условия фильтрации во фразе Where SQL-запроса. Оптимизатор MS SQL построит один и тот же план выполнения запроса руководствуясь собственными "соображениями" по поводу селективности тех или иных индексов. Вообще, какие-либо явные указания оптимизатору запросов в виде хинтов, какими индексами и каким образом он должен пользоваться, в тексте SQL-запроса я не вижу. Если SQL-запрос с тем же самым синтаксисом из Query Analysier выполняется моментально, значит проблема не на стороне MS SQL Server, а либо на стороне NAV, либо где-то "в промежутке" между ними.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839433
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech, предыдущий мой пост справедлив только в том случае, если на MS SQL Server уходит именно тот самый запрос, текст которого сформировался в NAV. Однако, у меня есть сомнения по этому поводу. Необходимо запустить Profiler (это что-то вроде "снифера" для MS SQL Server) и "прослушать" сам SQL-сервер, увидев глазами собственно то, что приходит на MS SQL Server.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839543
Ага
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Какая версия Нава и SQL?
Вообще, строго говоря, клиент Нава работает через серверные курсоры.
На сервер SQL передается что-то вроде (на примере расчета сифт полей):

Код: plaintext
1.
2.
3.
4.
declare @P1 int
set @P1= 1377 
exec sp_prepexec @P1 output, N'@P1 int,@P2 int,@P3 varchar(20),@P4 int,@P5 int', N'SELECT SUM("s4"),SUM("s30") FROM dbName."dbo"."OK$337$0" WHERE (bucket=@P1 AND f5=@P2 AND f2=@P3 AND f10=@P4 AND f11=@P5)',  6 ,  0 , '10108',  32 ,  0 
select @P1

Код: plaintext
1.
exec sp_execute  1346 ,  2 , '10108',  0 

Код: plaintext
1.
exec sp_cursoroption  180161382 ,  1 ,  51 

Код: plaintext
1.
exec sp_unprepare  1377 

Не верьте монитору клиента и особенно его счетчикам времени, посмотрите профайлером, какой код передается на SQL сервер.
Не исключено, что проблема совсем не в этом запросе.
Вариантов множество:
- locktable в следующей строчке кода и повышения уровня изоляции до read commited во всех запросах последующих операциях find('-') и next() - в купе с неправильно выбраным сервером ключем (криво поставленным в Наве фильтрам) приведет к массовой блокировке.
- банальный modify тоже приводит к перезапросу текущей с повышением уровня изоляции до read commited. Есть уверенность что записи в этот момент не блокированы?
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839644
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anatoleech_djХомяГanatoleech
Должно быть "Применено-к, применено-из". Используется "Применено-из".
Терминологию осваивать нет резона, да и некогда. При работе с sqlной базой NAV, с SQL
Раз должно быть - делайте каким то образом (каким не знаю и вряд ли это поддерживается, хотя всё возможно) при формировании выборки хинт по "нужному" индексу в Nav
Собственно, это и делает оператор SETCURRENTKEY - указывает ключ для сортировки и фильтрации.
В SQL должен использоваться аналогичный ключ, создаваемый NAV в SQL при установке галки "Maintain SQL index" в списке ключей таблицы. Я так понимаю, что передаваемый SELECT, содержащий ORDER BY, соответствующий выбранному ключу, как раз-таки должен побудить SQL использовать этот ключ (поправьте, если это не так и ORDER BY выполняет функцию, отличную от выбора ключа).Мда... С такой терминологией соваться на форум по MS SQL, пожалуй, действительно не стоит... :)
И пытаться решать подобные проблемы без специалиста, который разбирается в MS SQL, в общем-то, сродни хождению по краю пропасти.

Попытаюсь помочь, чем смогу. Прежде всего, "ключ" в терминологии MS SQL - это не совсем то (а точнее, совсем не то) понятие, которым пытаетесь оперировать Вы. Ключи в MS SQL бывают двух видов - первичный (Primary key) и вторичный (Foregn key). Первичный ключ позволяет однозначно идентифицировать запись в конкретной таблице. Создание первичного ключа сопровождается созданием уникального индекса к данной таблице. Вторичный ключ - это ссылка на запись первичного ключа, то есть на конкретную запись таблицы. Совокупности Primary key - Foregn key создаются для взаимной логической связки нескольких таблиц по некоторым полям. При создании таких связок можно дать указание MS SQL Server обеспечить логическую целостность информации с помощью DRI (Declarative Referential Integrity). То есть, встроенного в MS SQL функционала по обеспечению ссылочной целостности. При попытке удаления записи из таблицы, на которую ссылаются другие таблицы, DRI позволяет выполнить одно из следующих действий:
а) Отказаться удалять запись, если в какой-то другой таблице имеются записи, ссылающиеся на удаляемую (сгенерив ошибку)
б) Вместе с удаляемой записью из данной таблицы удалить также записи из смежных таблиц, которые ссылаются на удаляемую и благополучно завершить операцию
в) Удалить запись из данной таблицы, не проверяя, имеются ли на нее ссылки из других таблиц

В процессе использования таблиц этот функционал "просто работает", никаких дополнительных указаний SQL-серверу по тому, как им следует пользоваться, как правило, в SQL-запросах не содержится.

Теперь два слова об "индексах". В Fox, DBase, Clipper и т.п. РСУБД на заре их зарождения не имелось функционала работы с SQL-запросами. Они содержали свой собственный синтаксис и свои собственные правила обработки данных. В их структуре также создавались "индексы" и так же имелись "данные", но обработка данных производилась с явным указанием, какие индексы следует использовать при выборке данных. То есть, там изначально выдавалась команды:
1. Воспользоваться таким-то заранее созданным индесом (вспомогательной структурой ссылок на таблицу исходных данныхз)
2. Выбрать записи из таблицы данных, "глядя на них" как бы через индекс, на записи которого наложено определенное условие фильтрации.
3. Вернуть результат, который можно обработать по одной записи
Сдается мне, что Вы ожидаете чего-то подобного от MS SQL Server. Но он работает совершенно иначе. "Индекс" для него - это структура, как правило, для его "внутреннего" использования. Какими индексами и в каких случаях пользоваться, он принимает решение САМ , исходя из имеющихся индексов, заранее созданных по полям тех или иных таблиц и исходя из накопленных "статистик" (то есть данных о селективности) каждого индекса. В 99.99% случаев SQL-серверу не требуется давать никаких указаний по поводу того, какими индексами он должен пользоваться, потому что оптимизатор запросов у MS SQL Server в достаточной степени интеллектуален, чтобы выбрать наиболее оптимальный (быстрый) способ выполнения SQL-запроса. В тех же исключительных случаях, когда SQL-серверу даются конкретные указания по использованию индесов (созданных заранее), то обычно это делают специалисты в области MS SQL Server достаточно высокого уровня, которые очень хорошо разбираются в том, как работает оптимизатор запросов MS SQL, и четко отдают себе отчет, почему их не устраивает логика работы его "встроенного интеллекта". Чаще всего это происходит тогда, когда в некоторых таблицах происходит очень частое добавление и удаление больших объемов информации, при которых картина селективности различных индексов по этой таблице радикально изменяется. А процедура обновления статистик индекса не может использоваться слишком часто, потому что она замедляет работу SQL-сервера. То есть, опитимизатор запросов может сформировать неоптимальный план выполнения запроса потому, что пользуется устаревшими статистиками, который с высокой долей вероятности в существенной степени не соответствуют текущему состоянию индесов. Вот в этих случах в SQL-запрос добавляются так называемые "хинты" - подсказки оптимизатору запросов о том, какими индексами он должен пользоваться. Опять же "какими индесами" в терминах MS SQL Server, то есть, должно быть указано имя ранее созданного индеса, и для того, чтобы на него сослаться, это имя требуется знать .

Теперь собственно о тексте SQL-запроса. Прежде всего, хочу заметить, что стандартный SQL-запрос (не использующий специфику синтаксиса того или иного SQL-сервера) - это изначально именно язык ЗАПРОСОВ , а не "инструкций". То есть, SQL-запрос сообщает серверу лишь о том, какой РЕЗУЛЬТАТ намерен получить тот, кто этот запрос отправил. А вот способ (алгоритм), которым этот результат будет получен, SQL-сервер выбирает САМ . Теперь попытаемся перевести на русский язык, какой запрос пытается отправить NAV на MS SQL Server:
авторSELECT * FROM "Основная БД для тестирования$Товар Книга Применения"...
Выбрать все колонки из таблицы "Основная БД для тестирования$Товар Книга Применения"...

автор...WITH (READUNCOMMITTED)...это единственный хинт, который имеется в данном SQL-запросе. Он сообщает SQL-серверу, что ему разрешается читать так же те записи, которые добавились или изменились другими пользователями в других транзакциях, даже если эти транзакции не завершены и могут быть откачены.

автор...WHERE (("Примен.-к Операции Но."<>0)) AND (("Примен.-из Операции Но."=30195))...В указанной ранее таблице необходимо выбрать не все записи, а только те, для которых значение поля "Примен.-к Операции Но."<>0 и значение поля "Примен.-из Операции Но."=30195. Обратите внимание, здесь нет никаких указаний по поводу "индексов" или "ключей", здесь речь идет просто о ПОЛЯХ таблицы. Если по этим полям ранее не было создано никаких индесов, то оптимизатор SQL-сервера может попытаться выбрать записи методом полного просмотра всех записей этой таблицы. Если индексы были созданы, то он ими, скорее всего, воспользуется, если определит, что они обладают достаточной селективностью.
Обращаю также внимание на то, что порядок следования логических условий в SQL-запросе, объединяемых логическим AND, значения НЕ ИМЕЕТ . Оптимизатор запросов, если обнаружит ранее созданный индес по полю "Примен.-из Операции Но.", сам определит, что им нужно воспользоваться в первую очередь, а уже потом допольнительно отфильтровать из полученного набора записи в соответствии с условием "Примен.-к Операции Но."<>0

автор...ORDER BY "Примен.-к Операции Но.","Примен.-из Операции Но.","Операция Но."Полученный набор записей должен быть отсортирован по полю "Примен.-к Операции Но.". Для тех записей, у которых значения этого поля одинаковы, они сортируются в пределах одного значения по полю "Примен.-из Операции Но.". Для тех записей, у которых одинаково значение двух полей "Примен.-к Операции Но." и "Примен.-из Операции Но.", отсортировать по полю "Операция Но.".
Инструкция "ORDER BY" предписывает отсортировать записи в определенной последовательности. Если имеется индекс, по соответствующим полям, SQL-сервер им воспользуется, если нет, то отсортирует без индекса. Если количество возвращаемых записей до 200-300, то операция сортировки записей врядли сильно скажется на времени выполнения запроса. Если же их многие тысячи или сотни тысяч, тогда нужно будет убедиться, что индексы по соответствующим полям созданы и что статистики по ним регулярно обновляются.

Вот, собственно, и всё, что сказано в тексте SQL-запроса. "Верни мне записи, отфильтровав их по такому-то условию и отсортировав их таким-то образом". Ни слова ни о каких "ключах" и "индексах".

Теперь по сути. Самый простой способ без проникновения в расшифровки плана выполнения запроса и без "прослушивания" SQL-сервера утилитой Profiler (требуется некоторая сноровка, чтобы научиться отфильтровывать нужную информацию среди того водопада запросов, которые поступают на SQL-сервер).
Попробуй выполнить это запрос из Query Analyzer. Если он отрабатывает медленно, значит проблема на стороне MS SQL Server. Она может быть связана с тем, что по полю "Примен.-из Операции Но." индекс не был создан. Либо с тем, что индекс создан, но статистики по нему 10 лет не обновлялись.
Если запрос отрабатывает моментально, значит MS SQL Server "ни в чем не виноват".

Попробуй сначала выполнить запрос к MS SQL Server в Query Analyzer, сообщи о результатах, потом расскажу, что делать дальше.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839758
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, сообщи еще, сколько записей возвращает запрос.
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36839981
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
План выполнения запроса, который Вы выложили, меня сильно озадачил.

dawи, вообще, что там за индексы есть?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select 
  i.name 
  , sc.name
  , ik.keyno
  , indexproperty(i.id, i.name, 'IsClustered')
from sysindexes i
  inner join sysindexkeys ik on
    i.id = ik.id
    and i.indid = ik.indid
  inner join syscolumns sc on
    ik.id = sc.id
    and ik.colid = sc.colid
where 
  i.id = object_id('[dbo].[Основная БД для тестирования$Товар Книга Применения]')
order by
  i.id
  , ik.keyno
2 anatoleech.
Вы пробовали в Query Analyzer запустить этот запрос? Что он возвращает?

P.S. Перед его выполнением в верхней части окна QA необходимо выбрать текущую БД, в которой этот запрос должен быть выполнен. То есть, БД "Основная БД для тестирования".
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36840032
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Пуск -> Программы -> Microsoft SQL Server -> Query Analyzer

2. При запуске указываете логин и пароль, либо аудентификация Windows (я не знаю, под каким логином Вы коннектитесь в SQL-серверу)

3. В верхней части окна выбираете базу данных "Основная БД для тестирования".

4. Методом Copy-Paste переносите текст запроса в окно.

5. Нажимаете Ctrl+E, либо зеленую кнопочку, похожую на "включить воспроизведение" на магнитофоне.

6. Смотрите, что вернулось и сообщаете результат.

:)
...
Рейтинг: 0 / 0
NAV, SQL 2000 и оптимизатор запросов
    #36842847
Igor528
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему бы Вам не обратиться на mazzy.ru - может что подскажут?
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / NAV, SQL 2000 и оптимизатор запросов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]