powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Есть ли разница в исполнении запроса ?
10 сообщений из 35, страница 2 из 2
Есть ли разница в исполнении запроса ?
    #32003004
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет "мелких" запросов - само собой. Я говорил только о "крупных".
Насчет "поэтапной" оптимизации - мне казалось что это справедливо, но только для динамических запросов. Для SP - можно один раз напрячься по полной программе, зато потом наслаждаться
Можно ссылочку на MS?
Вообще, при оптимизации можно рассматривать ОЧЕНЬ большое число вариантов. Для уменьшения расходов на нее, количество рассматриваемых вариантов осознанно ограничивается. При этом в принципе допускается, что наиболее оптимальный вариант рассмотрен не будет. Число рассматриваемых вариантов будет ограничено независимо от того "большой" запрос или "маленький". Не знаю, как у MSSQL, но это то, что я читал по БД вообще.
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003008
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya:

>2Павел: А тебе известен способ вставки записей в возвращаемый хранимой процедурой набор данных?
>Что-нибудь вроде Isert into exec MyProc... или Insert into MyProc...?

Конечно не известен. Нет такого сособа. А вот интерестности: При указании в форме проекта А2K в качестве источника записей таблицы, запроса, представления или хранимой процедуры и при указании уникальной таблицы в профайлере отчетливо видно, что изменение данных происходит не через источник записей, а через уникальную таблицу. Так что в этом случае процедура также как-бы обновляема, как и запрос и представление. Понятно, конечно, что это частный случай. Вот только не разобрался, Ассеss так себя ведет, или ADO.
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003011
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya:

>2. Хранимые процедуры возвращают необновляемый набор данных.
>Параметризованный запрос может возвращать обновляемый набор данных.

А тебе известен способ вставки записей в возвращаемый запросом набор данных? Что-нибудь вроде Isert into <Запрос>?
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003013
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dmitry

Вот блин, щас перерыл всю BOL и не нашел фразы которую якобы читал вчера (по оптимизации выполнения процедур) из чего следует сделать вывод, что я что то напутал, сорри 8-()
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003048
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Павел. В A2K действительно у формы имеется свойство "уникальная таблица", которая позволяет "обмануть" необновляемость набора данных. На самом деле это просто прием, который используется исполняющей системой на самом клиенте - вместо работы с источником данных, который вернул запрос, A2K производит операции вставки/изменения/удаления с уникальной таблицей, которая специально указана как базовый источник данных. В общем случае уникальная таблица может вообще никакого отношения не иметь к данным, возвращенным в запросе ( это я к тому, что следует различать действительно обновляемый набор данных и всякого рода обманки, выполняемые на клиенте). Если параметризованный запрос выполнить через ADO, при условии что аналогичный НЕпараметризованный запрос также возвращает обновляемый набор данных, на клиенте появляется Bookmarkable recordset (терминология OLEDB), который и является условием обновляемости набора данных. Если, к примеру, в Delphi такой набор данных просвечен через DBGrid, то ты можешь непосредственно в нем модифицировать данные, не прибегая ко всякого рода обманкам. Модификация приводит к обращению на SQL-сервер напрямую к нужной записи через механизм Bookmark (меток записи).
2 Dmitry. Лови ссылочку на статьи (там много интересных, включая ту, о которой я говорил) http://www.microsoft.com/rus/sql/rusdocs.html.
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003052
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya:

>Если параметризованный запрос выполнить через ADO, при условии что аналогичный НЕпараметризованный запрос также возвращает обновляемый набор данных, на клиенте появляется Bookmarkable recordset (терминология OLEDB), который и является условием обновляемости набора данных

Это особенности реализации конкретного механизма доступа к данным. В любом случае все клиентские действия должны быть преобразованs в адекватные команды TSQL. Как уже отмечалось, не существует способа выполнить "Что-нибудь вроде Insert into exec MyProc... или Insert into MyProc" или "Что-нибудь вроде Insert into <Запрос>". Операции изменения данных доступны напрямую только для таблиц и представлений. Так чем, в таком случае, обновляемость набора записей, возвращенных процедурой, отличается от обновляемости набора записей, возвращенного запросом?
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003089
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Павел. Возможно, ты в чем-то прав, и я не совсем корректно попросил привести текст на T-SQL, доказывающий обновляемость набора данных. Однако, в OLEDB такое понятие существует. Известно, что хранимые процедуры возвращают необновляемый набор данных. Если открыть в ADO набор данных, возвращенный SP, то он В СВОЙСТВАХ ADO.Recordset покажет, что набор необновляемый. Ежели выдать команду select ..... чего-нибудь откуды-нибудь, то можно получить набор данных как обновляемый, так и не обновляемый. Вариант указания уникальной таблицы относится к конкретному инструментарию (Access-2000), и более нигде не катит. В Delphi также есть компоненты, выполняющие аналогичные обманные телодвижения. Кстати, в отличие от A2K, в них можно даже сделать так, что вставка будет идти в одну таблицу, модификация будет выполняться над второй, а удаление - в третей. Трудно себе представить, кому такое может понадобиться, но все это сказано лишь с целью подчеркнуть ориентированность определенных приемов на определенный инструментарий. Я же отвечал вообще - без привязки к конкретному инструментарию, а только к механизмам ADO, которые ведут себя схоже в любом инструментарии.
Когда ты в EM открываешь таблицу и модифицируешь в ней строку, то на сервер приходит команда не Update... (которую в аналогичной ситуации формирует A2K), а "exec sp_executesql N'UPDATE......". И еще несколько строк. Подобные строки может формировать ODBC-драйвер, само приложение, а может формировать OLEDB-провайдер, который в общем случае от используемого на клиенте инструментария независим. Вот я о чем.
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003094
Павел
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya:

Use pubs
go

Create Procedure sp_authors
As
Set Nocount On
Select * From Authors
Return
go

Предполагается, что проект adp A2K уже имеет соединение с базой pubs

Dim cmd As New Command, rst As New Recordset
rst.ActiveConnection = CurrentProject.Connection
rst.CursorLocation = adUseServer
rst.CursorType = adOpenStatic
rst.Source = "Select * From dbo.authors"
rst.Open
Debug.Print rst.Properties("Updatability").Name & ", " & rst.Properties("Updatability").Value
Debug.Print rst.Properties("Bookmarkable").Name & ", " & rst.Properties("Bookmarkable").Value
Debug.Print rst.Properties("Unique Table").Name & ", " & rst.Properties("Unique Table").Value
rst.Close
Set rst = Nothing

cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "dbo.sp_authors"
cmd.CommandType = adCmdStoredProc
cmd.Prepared = False
Set rst = cmd.Execute
Debug.Print rst.Properties("Updatability").Name & ", " & rst.Properties("Updatability").Value
Debug.Print rst.Properties("Bookmarkable").Name & ", " & rst.Properties("Bookmarkable").Value
Debug.Print rst.Properties("Unique Table").Name & ", " & rst.Properties("Unique Table").Value
rst.Close
Set rst = Nothing
Set cmd = Nothing

В Immediate:

Updatability, 7
Bookmarkable, True
Unique Table,
Updatability, 7
Bookmarkable, True
Unique Table,

Какие мысли?
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003245
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пересказал то, что вычитал (насколько помню, у Дженнингса). Видимо одного свойства Bookmarkable=True недостаточно для того, чтобы получить обновляемый набор данных (однако, если Bookmarkable=false, то набор данных однозначно необновляемый). Видимо, я не совсем правиИнтересно, а что выдаст Debug.Print rst.Supports(adAddNew)? Полагаю, что в первом случае True, а во втором False.
...
Рейтинг: 0 / 0
Есть ли разница в исполнении запроса ?
    #32003246
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отвлекли ... случайно нажал "отправить". Я хотел сказать, что видимо, не совсем правильно понимал Bookmarkable как исключительное требование обновляемости. Исходя из сказанного Павлом, я полагаю, что это возможность прицепиться к первичному ключу, однозначно идентифицирующего запись - то есть, одно из требований обновляемости набора данных.
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Есть ли разница в исполнении запроса ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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