|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
Насчет "мелких" запросов - само собой. Я говорил только о "крупных". Насчет "поэтапной" оптимизации - мне казалось что это справедливо, но только для динамических запросов. Для SP - можно один раз напрячься по полной программе, зато потом наслаждаться Можно ссылочку на MS? Вообще, при оптимизации можно рассматривать ОЧЕНЬ большое число вариантов. Для уменьшения расходов на нее, количество рассматриваемых вариантов осознанно ограничивается. При этом в принципе допускается, что наиболее оптимальный вариант рассмотрен не будет. Число рассматриваемых вариантов будет ограничено независимо от того "большой" запрос или "маленький". Не знаю, как у MSSQL, но это то, что я читал по БД вообще. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 01:03 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2 Garya: >2Павел: А тебе известен способ вставки записей в возвращаемый хранимой процедурой набор данных? >Что-нибудь вроде Isert into exec MyProc... или Insert into MyProc...? Конечно не известен. Нет такого сособа. А вот интерестности: При указании в форме проекта А2K в качестве источника записей таблицы, запроса, представления или хранимой процедуры и при указании уникальной таблицы в профайлере отчетливо видно, что изменение данных происходит не через источник записей, а через уникальную таблицу. Так что в этом случае процедура также как-бы обновляема, как и запрос и представление. Понятно, конечно, что это частный случай. Вот только не разобрался, Ассеss так себя ведет, или ADO. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 07:47 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2 Garya: >2. Хранимые процедуры возвращают необновляемый набор данных. >Параметризованный запрос может возвращать обновляемый набор данных. А тебе известен способ вставки записей в возвращаемый запросом набор данных? Что-нибудь вроде Isert into <Запрос>? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 08:38 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2 Dmitry Вот блин, щас перерыл всю BOL и не нашел фразы которую якобы читал вчера (по оптимизации выполнения процедур) из чего следует сделать вывод, что я что то напутал, сорри 8-() ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 10:32 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2Павел. В A2K действительно у формы имеется свойство "уникальная таблица", которая позволяет "обмануть" необновляемость набора данных. На самом деле это просто прием, который используется исполняющей системой на самом клиенте - вместо работы с источником данных, который вернул запрос, A2K производит операции вставки/изменения/удаления с уникальной таблицей, которая специально указана как базовый источник данных. В общем случае уникальная таблица может вообще никакого отношения не иметь к данным, возвращенным в запросе ( это я к тому, что следует различать действительно обновляемый набор данных и всякого рода обманки, выполняемые на клиенте). Если параметризованный запрос выполнить через ADO, при условии что аналогичный НЕпараметризованный запрос также возвращает обновляемый набор данных, на клиенте появляется Bookmarkable recordset (терминология OLEDB), который и является условием обновляемости набора данных. Если, к примеру, в Delphi такой набор данных просвечен через DBGrid, то ты можешь непосредственно в нем модифицировать данные, не прибегая ко всякого рода обманкам. Модификация приводит к обращению на SQL-сервер напрямую к нужной записи через механизм Bookmark (меток записи). 2 Dmitry. Лови ссылочку на статьи (там много интересных, включая ту, о которой я говорил) http://www.microsoft.com/rus/sql/rusdocs.html. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.03.2001, 21:52 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2 Garya: >Если параметризованный запрос выполнить через ADO, при условии что аналогичный НЕпараметризованный запрос также возвращает обновляемый набор данных, на клиенте появляется Bookmarkable recordset (терминология OLEDB), который и является условием обновляемости набора данных Это особенности реализации конкретного механизма доступа к данным. В любом случае все клиентские действия должны быть преобразованs в адекватные команды TSQL. Как уже отмечалось, не существует способа выполнить "Что-нибудь вроде Insert into exec MyProc... или Insert into MyProc" или "Что-нибудь вроде Insert into <Запрос>". Операции изменения данных доступны напрямую только для таблиц и представлений. Так чем, в таком случае, обновляемость набора записей, возвращенных процедурой, отличается от обновляемости набора записей, возвращенного запросом? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 07:03 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
2 Павел. Возможно, ты в чем-то прав, и я не совсем корректно попросил привести текст на T-SQL, доказывающий обновляемость набора данных. Однако, в OLEDB такое понятие существует. Известно, что хранимые процедуры возвращают необновляемый набор данных. Если открыть в ADO набор данных, возвращенный SP, то он В СВОЙСТВАХ ADO.Recordset покажет, что набор необновляемый. Ежели выдать команду select ..... чего-нибудь откуды-нибудь, то можно получить набор данных как обновляемый, так и не обновляемый. Вариант указания уникальной таблицы относится к конкретному инструментарию (Access-2000), и более нигде не катит. В Delphi также есть компоненты, выполняющие аналогичные обманные телодвижения. Кстати, в отличие от A2K, в них можно даже сделать так, что вставка будет идти в одну таблицу, модификация будет выполняться над второй, а удаление - в третей. Трудно себе представить, кому такое может понадобиться, но все это сказано лишь с целью подчеркнуть ориентированность определенных приемов на определенный инструментарий. Я же отвечал вообще - без привязки к конкретному инструментарию, а только к механизмам ADO, которые ведут себя схоже в любом инструментарии. Когда ты в EM открываешь таблицу и модифицируешь в ней строку, то на сервер приходит команда не Update... (которую в аналогичной ситуации формирует A2K), а "exec sp_executesql N'UPDATE......". И еще несколько строк. Подобные строки может формировать ODBC-драйвер, само приложение, а может формировать OLEDB-провайдер, который в общем случае от используемого на клиенте инструментария независим. Вот я о чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2001, 21:26 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
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, Какие мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.03.2001, 07:30 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
Я пересказал то, что вычитал (насколько помню, у Дженнингса). Видимо одного свойства Bookmarkable=True недостаточно для того, чтобы получить обновляемый набор данных (однако, если Bookmarkable=false, то набор данных однозначно необновляемый). Видимо, я не совсем правиИнтересно, а что выдаст Debug.Print rst.Supports(adAddNew)? Полагаю, что в первом случае True, а во втором False. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 18:02 |
|
Есть ли разница в исполнении запроса ?
|
|||
---|---|---|---|
#18+
Отвлекли ... случайно нажал "отправить". Я хотел сказать, что видимо, не совсем правильно понимал Bookmarkable как исключительное требование обновляемости. Исходя из сказанного Павлом, я полагаю, что это возможность прицепиться к первичному ключу, однозначно идентифицирующего запись - то есть, одно из требований обновляемости набора данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 18:07 |
|
|
start [/forum/topic.php?fid=46&startmsg=32003004&tid=1827176]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 138ms |
0 / 0 |