|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Tolik Tentser 2:5020/400 05 Feb 2001 19:08:32 To : All Subject : Re: Увеличение скорости --------------------------------------------------------------------------------
Hi, Vadim Rumyantsev!
В чреве акулы, пойманной Mon, 05 Feb 2001 11:51:53 +0300,
дети капитана Гранта нашли письмо на тему 'Увеличение скорости':
> TT> Применительно к MSSQL - "недофетченный" запрос - блокирует данные. А
> TT> BDE имет дурацкую привычку все данные не сфетчивать. Дальше - наверно
> TT> и сам догадаешься.
>
>Я, кстати, обнаружил, что не понимаю этого аргумента даже применительно к MSSQL
>(или любому другому блокировочному серверу).
>
>Блокировки на данных должны стоять до окончания транзакции. Какая в этом свете
>разница, будет произведён FetchAll, или не будет?
Тогда давай рассматривать пример.
Заранее отметаем случай, когда возвращаемый RecordSet сразу
считывается в память или помещается сервером во временную таблицу
(например, в результате сортировки). Т.е. полагаем, что он большой и
фетч идет из таблицы. Уровень изоляции - READ COMMITED
Итак
BEGIN TRANSACTION
SELECT * FROM T WHERE T.A = 1
SELECT COUNT(*) FROM T WHERE T.A = 1
COMMIT
Ты хочешь сказать, что если во время SELECT отобрались какие-то
записи, но клиент их не фетчил, то после COMMIT все блокировки будут
сняты ?
А что будет, если дальше произойдет (до фетча) ?
UPDATE T SET T.A = 2 WHERE T.A = 1
Что придет на клиента ?
Hи одной записи ?
Все записи, но с A = 1 ?
И что вернет SELECT COUNT(*) ?
Bye ...
Тенцер А.Л.
tolik@katren.nsk.ru
ICQ 15925834
--- ifmail v.2.15dev5
* Origin: AO Katren (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/2080ce1133e3.html, оценка из 5, голосов 10
|