powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Скорость update
36 сообщений из 36, показаны все 2 страниц
Скорость update
    #35034171
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Работаю с MS SQL Server 2000

Оптимизировал однажды одну штуку. Столкнулся с тем что update одной записи выполняется 15мс. Это очень долго. Специфика была такова, что обновлялось много записей, большая часть которых не менялась, но заранее я не мог знать какие именно записи поменялись. Это дело с легкостью оптимизировалось написанием хранимой процедуры, которая сперва доставала запись и БД, сравнивала и только потом обновляла. Можно было триггер написать. В результате необходимость в фиксации транзакции в большинстве случаев отпала, т.к. записи не было, и скорость работы в среднем возросла в 20 раз.

Внимание вопрос! Реализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?
...
Рейтинг: 0 / 0
Скорость update
    #35034199
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>которая сперва доставала запись и БД, сравнивала и только потом обновляла
открой для себя то что в update можно написать WHERE

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скорость update
    #35034203
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторОптимизировал однажды одну штуку. Столкнулся с тем что update одной записи выполняется 15мс.

А можно увидеть эту "одну" штуку? И чем выполнялись замеры?!

авторСпецифика была такова, что обновлялось много записей, большая часть которых не менялась, но заранее я не мог знать какие именно записи поменялись.

ТАк что же все-таки происходило на самом деле? Кривонаписанный код с курсором?

авторЭто дело с легкостью оптимизировалось написанием хранимой процедуры, которая сперва доставала запись и БД, сравнивала и только потом обновляла.

Какое "это дело"? Кривой код? Доставала из бд и сравновала с чем? Почему надо было обрабатывать по-одной записи, а не обновить все подпадающие под условия обновления?

авторВ результате необходимость в фиксации транзакции в большинстве случаев отпала, т.к. записи не было, и скорость работы в среднем возросла в 20 раз.

Эээ... Позаписное обновление и для каждой записи отдельная транзакция?

авторРеализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?

Какая? Вы имеете ввиду, что СУБД ничего не должна сделать, при отправке ей инструкции вида:

Код: plaintext
1.
2.
3.
UPDATE
  SomeTable
SET
  SomeField = SomeField

???
...
Рейтинг: 0 / 0
Скорость update
    #35034255
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
>которая сперва доставала запись и БД, сравнивала и только потом обновляла
открой для себя то что в update можно написать WHERE
Точно! Блин... Ну все равно ж надо where писать
...
Рейтинг: 0 / 0
Скорость update
    #35034261
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka KefirНу все равно ж надо where писать

А то?! А иногда и JOIN несколько раз во FROMе, а еще derived tables и прочую всякую всячину, относящууюся к программированию на T-SQL.
...
Рейтинг: 0 / 0
Скорость update
    #35034305
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin авторОптимизировал однажды одну штуку. Столкнулся с тем что update одной записи выполняется 15мс.
А можно увидеть эту "одну" штуку? И чем выполнялись замеры?!

Увидеть нет. Все не так просто на самом деле.
Замеры выполнялись профайлером. И показаниями системного таймера уже непосредственно в приложении.

авторСпецифика была такова, что обновлялось много записей, большая часть которых не менялась, но заранее я не мог знать какие именно записи поменялись.
ТАк что же все-таки происходило на самом деле? Кривонаписанный код с курсором?

Какой курсор? Примерно так. Пользователь выгружает некий справочник, в моем случае в Excel. Но это не важно, с тем же успехом могли быть dbf и т.п.. Правит его у себя и загружает обратно. Зачем его целиком таскать мне самому непонятно.


авторЭто дело с легкостью оптимизировалось написанием хранимой процедуры, которая сперва доставала запись и БД, сравнивала и только потом обновляла.
Какое "это дело"? Кривой код? Доставала из бд и сравновала с чем? Почему надо было обрабатывать по-одной записи, а не обновить все подпадающие под условия обновления?

Мне данные снаружи приходят.

авторВ результате необходимость в фиксации транзакции в большинстве случаев отпала, т.к. записи не было, и скорость работы в среднем возросла в 20 раз.
Эээ... Позаписное обновление и для каждой записи отдельная транзакция?

Batch-режим - это отдельный разговор. Меня интересует уже чисто теоретический момент. Ну ладно когда от одного пользователя пришли данные, я их могу скопом запихать, а вот если у меня много пользователей.

авторРеализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?

Какая? Вы имеете ввиду, что СУБД ничего не должна сделать, при отправке ей инструкции вида:

Код: plaintext
1.
2.
3.
UPDATE
  SomeTable
SET
  SomeField = SomeField

???
Если фактически данные не изменяются, то СУБД не должна их обновлять.

Поймите правильно. Сейчас все работает нормально. Проблем у меня нет. Меня волнует один единственный вопрос, почему, если данные не изменились, СУБД все равно их обновляет и фиксирует транзакцию. Не легче ли их просто оставить как есть? Или здесь какой-то тайный смысл?
...
Рейтинг: 0 / 0
Скорость update
    #35034320
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin Самоловских Виталий aka KefirНу все равно ж надо where писать
А то?! А иногда и JOIN несколько раз во FROMе, а еще derived tables и прочую всякую всячину, относящууюся к программированию на T-SQL.

Тупо: есть таблица mytable с полями
ind id
varchar name

В ней запись:
1 ляляля

Делаем так

update mytable
set name='ляляля'
where id=1

выполняется 15 мс и ничего при этом не меняет.

update mytable
set name='ляляля'
where id=1 and name<>'ляляля'

выполняется быстро и ничего при этом не меняет.

Вот это меня и напрягает. Почему я должен писать дополнительное условие, добавлять параметр к запросу, почему это не реализовано на уровне СУБД?
...
Рейтинг: 0 / 0
Скорость update
    #35034356
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЗамеры выполнялись профайлером.

Профайлер в 2000 выдает саттистику с точность в половину точности типа данных datetime - около 16 миллисекунд. Так что все Ваши измерения "приблизительно потолочные".

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

Как в приложении системным таймером можно измерить время выполнения запроса на сервере ?!

авторПримерно так. Пользователь выгружает некий справочник, в моем случае в Excel. Но это не важно, с тем же успехом могли быть dbf и т.п.. Правит его у себя и загружает обратно. Зачем его целиком таскать мне самому непонятно.

Абалдеть архитектурка...

авторBatch-режим - это отдельный разговор. Меня интересует уже чисто теоретический момент. Ну ладно когда от одного пользователя пришли данные, я их могу скопом запихать, а вот если у меня много пользователей.

Какой момент Вас интересует? И про "много пользователей" проблема не понятна?!

авторЕсли фактически данные не изменяются, то СУБД не должна их обновлять.

И это она еще должна сделать на стадии, когда только пользователь подумал. Да? Ваша задача, как разработчика, создать необходимый алгоритм обработки данных.

авторМеня волнует один единственный вопрос, почему, если данные не изменились, СУБД все равно их обновляет и фиксирует транзакцию.

Потому что она делает то, что ей велели (в коде). Как Вы напишите код, так и будет вести себя СУБД.

авторНе легче ли их просто оставить как есть?

С чего бы СУБД проявлять самодеятельность?!
...
Рейтинг: 0 / 0
Скорость update
    #35034376
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДелаем так

update mytable
set name='ляляля'
where id=1

выполняется 15 мс и ничего при этом не меняет.

Щаз, не меняет. Это Вы в курсе, что новое значение и старое совпадает. Вы попросили СУБД явно проставить значение в поле записи. Зачем ей проявлять самодеятельность (тратя на это доп ресуры) и сравнивать старое и новое значение. Она честно (грубо):

1. Откроет транзакцию.
2. Запишет изменения в лог.
3. Изменит запись.
4. Если нет ошибок, закоммитит.

авторupdate mytable
set name='ляляля'
where id=1 and name<>'ляляля'

выполняется быстро и ничего при этом не меняет.

А то?! Менять то нечего, ибо нет записей, подпадающих под условия отбора.

авторПочему я должен писать дополнительное условие, добавлять параметр к запросу, почему это не реализовано на уровне СУБД?

Патамушто разумом наделены Вы, а не СУБД. И в Ваших руках управление СУБД.

ЗЫ. Если писать не хочется, то, м.б. стоит поискать себе другое занятие?
...
Рейтинг: 0 / 0
Скорость update
    #35034565
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin авторДелаем так

update mytable
set name='ляляля'
where id=1

выполняется 15 мс и ничего при этом не меняет.

Щаз, не меняет. Это Вы в курсе, что новое значение и старое совпадает. Вы попросили СУБД явно проставить значение в поле записи. Зачем ей проявлять самодеятельность (тратя на это доп ресуры) и сравнивать старое и новое значение...
Как Вам чуть выше продемонстрировали - если проверять значение - ресурсов тратиться меньше

pkarklinЗЫ. Если писать не хочется, то, м.б. стоит поискать себе другое занятие?
На то и сервер чтобы за меня делать тупую работу


2 Самоловских Виталий aka Kefir
Вы не учитываете, что сервер на каждый апдейт еще создаётся deleted и inserted, а для этого имеет значение делаете вы апдейт ничего не меняя или не делаете. Может быть у Вас еще триггер есть? 15мс как-то многовато
...
Рейтинг: 0 / 0
Скорость update
    #35034572
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Как в приложении системным таймером можно измерить время выполнения запроса на сервере ?!

Я где-то сказал, что это 1 запрос? Мне в сущности все равно сколько времени выполняется запрос. Меня интересует время реакции системы. Именно про него я говорил, когда имел ввиду в 20 раз.

авторПримерно так. Пользователь выгружает некий справочник, в моем случае в Excel. Но это не важно, с тем же успехом могли быть dbf и т.п.. Правит его у себя и загружает обратно. Зачем его целиком таскать мне самому непонятно.

Абалдеть архитектурка...

А Вы уверены, что ваши пользователи используют вашу систему так как Вы задумывали?

Какой момент Вас интересует? И про "много пользователей" проблема не понятна?!

Запросы от нескольких пользователей в одну транзакцию не запихать. Ну можно, но это изврат. Так что batch-режим в этом случае не поможет.

авторМеня волнует один единственный вопрос, почему, если данные не изменились, СУБД все равно их обновляет и фиксирует транзакцию.
Потому что она делает то, что ей велели (в коде). Как Вы напишите код, так и будет вести себя СУБД.

А вот и нет. SQL относится к языкам сверхвысокого уровня. Я не должен говорить как, я должен говорить что.

авторНе легче ли их просто оставить как есть?
С чего бы СУБД проявлять самодеятельность?!
С того что в ряде случаев это будет быстрее.
...
Рейтинг: 0 / 0
Скорость update
    #35034591
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
Может быть у Вас еще триггер есть? 15мс как-то многовато
Нет. Это чистый апдейт. Сервак старенький, винты медленные. Быстрее не получается.
...
Рейтинг: 0 / 0
Скорость update
    #35034742
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperКак Вам чуть выше продемонстрировали - если проверять значение - ресурсов тратиться меньше

Ну так и пишите запрос у словием проверки. Почему сервер должен "додумывать" это за разработчика. Б.м. Вы мне приведете ссылки на языки, которые в случие явно прописанного в коде (абстрактно):

Var1 = <SomeValue>

будет проверять значение, которое уже есть в Var1 и если оно равно <SomeValue>, не будет выполнять присвоения.

SergSuperНа то и сервер чтобы за меня делать тупую работу

Знаете за что я не люблю Excel - за то, что он начинает "делать за меня тупую работу". Вставьте значение банковского счета в ячейку на чистом листе и уйдите с нее.
...
Рейтинг: 0 / 0
Скорость update
    #35034789
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Знаете за что я не люблю Excel - за то, что он начинает "делать за меня тупую работу". Вставьте значение банковского счета в ячейку на чистом листе и уйдите с нее.
Вы е любите а я люблю. Я же не сказал что сервер обязан делать такую проверку. Я во-первых спросил: "Реализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?" Пользоваться ими или нет это сугубо Ваше, в Вашем случае, и мое, в моем, дело.

Вы вскользь упомянули, что на это тратятся дополнительные ресурсы. Единственное конструктивное высказывание по вопросу. Но позвольте, разве при апдейте не копируются страницы, разве искомая запись не попадает в оперативку в любом случае? В моем понимании для такой проверки потребуются лишь несколько дополнительных тактов процессора. Которые в случае фиксации транзакции в БД стоят несоизмеримо меньше, чем скорость записи на жесткий диск. И такая проверка никак не повлияет на скорость выполнения транзакции.

Если я ошибаюсь, то, не могли бы Вы меня просветить?
...
Рейтинг: 0 / 0
Скорость update
    #35034823
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklinБ.м. Вы мне приведете ссылки на языки, которые в случие явно прописанного в коде (абстрактно):

Var1 = <SomeValue>

будет проверять значение, которое уже есть в Var1 и если оно равно <SomeValue>, не будет выполнять присвоения.
Аналогия неуместна (с) Формула Любви

Если мы держим переменную в памяти, то скорость записи примерно равна скорости чтения. Плюс куча всяких кэшей, короче эффекта никакого.

В случае БД:
1. Скорость чтения ОЗУ заметно выше, чем скорость записи на диск.
2. Запись с большой вероятностью может находиться в ОЗУ.
3. В любом случае происходит чтение страницы с записью и она попадает в ОЗУ.
Таким образом дополнительная проверка может дать (и дает) значительный эффект в производительности.
...
Рейтинг: 0 / 0
Скорость update
    #35034992
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ где-то сказал, что это 1 запрос? Мне в сущности все равно сколько времени выполняется запрос. Меня интересует время реакции системы. Именно про него я говорил, когда имел ввиду в 20 раз.

Да Вы вообще мало чего говорите техничеком плане. Ведете речь об улучшайзинге "одной штуки" и "этого дела". В результат виноватым оказывается сервер в том что он оказался не прозорливым и не додумал за Вас.

авторА Вы уверены, что ваши пользователи используют вашу систему так как Вы задумывали?

Угу. Уверен.

авторЗапросы от нескольких пользователей в одну транзакцию не запихать. Ну можно, но это изврат. Так что batch-режим в этом случае не поможет.

От нескольких пользователей в текущей постановке - нет. А вот хотя бы все запросы одного клиента завернуть в общую транзакцию стоит.

авторА вот и нет. SQL относится к языкам сверхвысокого уровня. Я не должен говорить как, я должен говорить что.

Вы и говорите, "что", но "как" - определено "by design", а не так как Вы предполагаете.

авторС того что в ряде случаев это будет быстрее.

Но не будет соответствовать семантике запроса!
...
Рейтинг: 0 / 0
Скорость update
    #35035102
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin авторЯ где-то сказал, что это 1 запрос? Мне в сущности все равно сколько времени выполняется запрос. Меня интересует время реакции системы. Именно про него я говорил, когда имел ввиду в 20 раз.
Да Вы вообще мало чего говорите техничеком плане. Ведете речь об улучшайзинге "одной штуки" и "этого дела". В результат виноватым оказывается сервер в том что он оказался не прозорливым и не додумал за Вас.

Я не виду речь об улучшайзинге конкретной штуки. И сервер ни в чем не виноват. Каким бы ни был сервер в конечном итоге скорость фиксации транзакции зависит от скорости винтов и от этого никуда не деться.

Вот это о чем-нибудь Вам говорит? "Внимание вопрос! Реализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?" Это было в моем 1м сообщении!!!

Меня не интересует Ваше мнение обо мне и о моей системе. Меня интересует ответ на конкретный вопрос: "Реализована ли подобная проверка в каких-нибудь СУБД? Если да, то в каких?"
...
Рейтинг: 0 / 0
Скорость update
    #35035140
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka KefirВы вскользь упомянули, что на это тратятся дополнительные ресурсы. Единственное конструктивное высказывание по вопросу. Но позвольте, разве при апдейте не копируются страницы, разве искомая запись не попадает в оперативку в любом случае? В моем понимании для такой проверки потребуются лишь несколько дополнительных тактов процессора. Которые в случае фиксации транзакции в БД стоят несоизмеримо меньше, чем скорость записи на жесткий диск. И такая проверка никак не повлияет на скорость выполнения транзакции. Если я ошибаюсь, то, не могли бы Вы меня просветить?

Т.е. Вы хотите, чтобы все, ято связано с изменением значение поля завязывалось на его значение на уровне ядра, а не на уровне разработки?

Возможно, когда-нибудь, ANSI и придумет какую-нибудь дополнительную клаузу в UPDATE типа

Код: plaintext
1.
2.
3.
update mytable
set name='ляляля'
where id= 1 
OPTION (NewValueOnly)

:)
...
Рейтинг: 0 / 0
Скорость update
    #35035161
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Т.е. Вы хотите, чтобы все, ято связано с изменением значение поля завязывалось на его значение на уровне ядра, а не на уровне разработки?

ДА! ДА! ДА! Именно об этом я и спрашиваю!!! Вполне логично допустить, что где-то это уже реализовано. Вот я и хочу это знать. Залезть в дебри пары десятков популярных СУБД для одного человека не представляется возможным, поэтому я и задаю этот вопрос на форуме. Может кто-нибудь скажет: "А вот в VasiaPupkinSQL это уже давно реализовано!"

Возможно, когда-нибудь, ANSI и придумет какую-нибудь дополнительную клаузу в UPDATE типа

Код: plaintext
1.
2.
3.
update mytable
set name='ляляля'
where id= 1 
OPTION (NewValueOnly)

:)
Будем надеяться.
...
Рейтинг: 0 / 0
Скорость update
    #35035183
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЯ не виду речь об улучшайзинге конкретной штуки. И сервер ни в чем не виноват.

Гы... Это кто сказал:

авторРаботаю с MS SQL Server 2000

Оптимизировал однажды одну штуку. Столкнулся с тем что update одной записи выполняется 15мс. Это очень долго
?
Дальше, как оказывается, таки был кривой код, улучшайзингом которого Вы занялись, убрав лишние UPDATEты. Потом всплыло, что фиксация транзакции выполнялась для каждой изменяемой записи. И в конце концов Вам "захотелось найти СУБД" (о чем Вы и спросили) которая вместо Вас будет заниматься улучшайзингом.

авторМеня не интересует Ваше мнение обо мне и о моей системе.

Вне зависомости от того, интересует оно Вас или нет, нравится Вам это или нет, я имею право его высказывать в пределах Правил форума.

Вам или придется с этим мирится или больше не задавать здесь вопросов.
...
Рейтинг: 0 / 0
Скорость update
    #35035200
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторБудем надеяться.

Не думаю, что это кому-нибудь придет в голову, ибо это реализуется уже существующим набором клауз. ;)
...
Рейтинг: 0 / 0
Скорость update
    #35035435
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin
Дальше, как оказывается, таки был кривой код, улучшайзингом которого Вы занялись, убрав лишние UPDATEты.
Не кривой, а плохо оптимизированный :-\
И, естественно, я бы хотел чтобы оптимизацией занималась СУБД. Не вижу в этом ничего плохого.
...
Рейтинг: 0 / 0
Скорость update
    #35035450
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka KefirИ, естественно, я бы хотел чтобы оптимизацией занималась СУБД. Не вижу в этом ничего плохого.

Ну, она занимается в силу своих возможностей. Но не на уровне "перекраивания" инструкций. :)
...
Рейтинг: 0 / 0
Скорость update
    #35035675
ЧАЛ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самоловских Виталий aka KefirВот это меня и напрягает. Почему я должен писать дополнительное условие, добавлять параметр к запросу, почему это не реализовано на уровне СУБД?
В отсутствии транзакций действительно такое пожелание возможно, но тогда это уже не будет полноценная СУБД. Так что тут проблемы глубже. Вся пакость в том, что в общем случае два следующие запроса могут привести БД к разным состояниям:

Код: plaintext
update mytable set name = 'lalala'; 

Код: plaintext
update mytable set name = 'lalala' where name != 'lalala'; 

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

Это легко продемонстрировать. После первого запроса гарантировано все поля будут равны 'lalala'. А вот после второго запроса это вовсе не гарантировано, поскольку те поля, который уже были равны 'lalala' (а потому исключены) могут быть в процессе выполнения приравнены к какому-то другому значению (конкурентным запросом). Такие ситуации часто встречаются, например, с неравенствами тоже подобного рода проблемы могут возникнуть.

Возможно, такая оптимизация включается автоматически в какой-то СУБД, если отключить транзакции или понизить уровень (ну и нужны индексы конечно).
...
Рейтинг: 0 / 0
Скорость update
    #35035727
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin SergSuperКак Вам чуть выше продемонстрировали - если проверять значение - ресурсов тратиться меньше

Ну так и пишите запрос у словием проверки. Почему сервер должен "додумывать" это за разработчика. Б.м. Вы мне приведете ссылки на языки, которые в случие явно прописанного в коде (абстрактно):

Var1 = <SomeValue>

будет проверять значение, которое уже есть в Var1 и если оно равно <SomeValue>, не будет выполнять присвоения.


Посмотрите исходники VCL - почти все проперти так реализованы
...
Рейтинг: 0 / 0
Скорость update
    #35035753
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper
Посмотрите исходники VCL - почти все проперти так реализованы

Исходный код, написанный разработчиком на T-SQL = исходникам VCL. Т.е. как раз та самая ситуация, когда разработчик включает мозг, а не тупо прописывает свойство.
...
Рейтинг: 0 / 0
Скорость update
    #35035849
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin SergSuper
Посмотрите исходники VCL - почти все проперти так реализованы

Исходный код, написанный разработчиком на T-SQL = исходникам VCL. Т.е. как раз та самая ситуация, когда разработчик включает мозг, а не тупо прописывает свойство.
Поле таблицы = проперти в Дельфи
Такой же черный ящик. Почему бы так не реализовать и в MS SQL(поведение то системы никак не меняется, а скорость может вырасти) для меня например тоже остаётся загадкой. Скорее всего какие-то архитектурные препятствия.
...
Рейтинг: 0 / 0
Скорость update
    #35036673
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЧАЛ
В отсутствии транзакций действительно такое пожелание возможно, но тогда это уже не будет полноценная СУБД. Так что тут проблемы глубже. Вся пакость в том, что в общем случае два следующие запроса могут привести БД к разным состояниям:

Код: plaintext
update mytable set name = 'lalala'; 

Код: plaintext
update mytable set name = 'lalala' where name != 'lalala'; 

Это легко продемонстрировать. После первого запроса гарантировано все поля будут равны 'lalala'. А вот после второго запроса это вовсе не гарантировано, поскольку те поля, который уже были равны 'lalala' (а потому исключены) могут быть в процессе выполнения приравнены к какому-то другому значению (конкурентным запросом). Такие ситуации часто встречаются, например, с неравенствами тоже подобного рода проблемы могут возникнуть.

Угу. Да проблема. Но думаю что, если оптимизация пойдет на уровне СУБД, это можно обойти. Заблокировать неизменяемые записи для записи. Ну т.е. те которые как-бы обновляются а на самом деле не обновляются. А ну хотя, здесь опять работа с транзакциями, страницы надо блокировать. Вот оно в чем дело!
...
Рейтинг: 0 / 0
Скорость update
    #35036710
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Такие ситуации часто встречаются,
открой для себя уровни изолированности транзакций

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скорость update
    #35036711
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Посмотрите исходники VCL - почти все проперти так реализованы
для текстовый (или просто больших) свойств проще сразу присвоить, бо
проверка дороже выйдет. я думаю что поэтому и не сделали

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скорость update
    #35037163
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuperПоле таблицы = проперти в Дельфи
Такой же черный ящик. Почему бы так не реализовать и в MS SQL(поведение то системы никак не меняется, а скорость может вырасти) для меня например тоже остаётся загадкой. Скорее всего какие-то архитектурные препятствия.
Как вариант:

Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1 
И
Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1  AND <field> <> 'ляляля'
Могут привести к РАЗНЫМ результатам в БД! К примеру триггер на таблице. В одном случае он будет вызван, а в другом нет.

Потому "By Design" сведение этого поведения к одному недопустимо... ИЛИ нужно просчитывать, что даже если UPDATE не прошел, то триггер нужно запустить.
...
Рейтинг: 0 / 0
Скорость update
    #35037235
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггеры, текстовые поля и т.п. - это уже детали. Длинные текстовые поля можно писать без проверки, если навешан триггер, то оптимизацию не делать. СУБД же знает с чем имеет дело, так что сложности здесь нет. А вот с транзакционной целостностью, похоже, не проходит.
...
Рейтинг: 0 / 0
Скорость update
    #35037243
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka Kefir пишет:
> Оптимизировал однажды одну штуку. Столкнулся с тем что update одной
> записи выполняется 15мс. Это очень долго. Специфика была такова, что

Это - быстро. Долго - это порядка секунд.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Скорость update
    #35037833
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
>Посмотрите исходники VCL - почти все проперти так реализованы
для текстовый (или просто больших) свойств проще сразу присвоить, бо
проверка дороже выйдет. я думаю что поэтому и не сделали

Posted via ActualForum NNTP Server 1.4

Не. Дело в том, что просто изменеие может привести к генерации цепочки ненужных событий, потому и проверяют.
...
Рейтинг: 0 / 0
Скорость update
    #35038147
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrow
>Посмотрите исходники VCL - почти все проперти так реализованы
для текстовый (или просто больших) свойств проще сразу присвоить, бо
проверка дороже выйдет. я думаю что поэтому и не сделали

есть всё-таки разница между тем чтобы обновить участок памяти и обновить поле таблицы со всеми вытекающими блокировками, пересчетами индексов и т.д.



VoDA SergSuperПоле таблицы = проперти в Дельфи
Такой же черный ящик. Почему бы так не реализовать и в MS SQL(поведение то системы никак не меняется, а скорость может вырасти) для меня например тоже остаётся загадкой. Скорее всего какие-то архитектурные препятствия.
Как вариант:

Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1 
И
Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1  AND <field> <> 'ляляля'
Могут привести к РАЗНЫМ результатам в БД! К примеру триггер на таблице. В одном случае он будет вызван, а в другом нет.

Потому "By Design" сведение этого поведения к одному недопустимо... ИЛИ нужно просчитывать, что даже если UPDATE не прошел, то триггер нужно запустить.

естественно имеется в виду что внешне это никак не должно отражаться
разговор идёт только о реализации самого сервера
...
Рейтинг: 0 / 0
Скорость update
    #35038549
VoDA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper VoDA[Как вариант:

Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1 
И
Код: plaintext
UPDATE <table> SET <field> = 'ляляля' WHERE id =  1  AND <field> <> 'ляляля'
Могут привести к РАЗНЫМ результатам в БД! К примеру триггер на таблице. В одном случае он будет вызван, а в другом нет.

Потому "By Design" сведение этого поведения к одному недопустимо... ИЛИ нужно просчитывать, что даже если UPDATE не прошел, то триггер нужно запустить.

естественно имеется в виду что внешне это никак не должно отражаться
разговор идёт только о реализации самого сервераВозможно во всем виновата Бритва Оккама.
Данное действо усложняет логику работы системы, при этом бОльшему количеству использующих ИМХО не нужна.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Скорость update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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