metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-03-06 08:58 pm

Очередной срачъ, у zabivator-а

Я всегда думал, что может заставить людей не использовать связываемые параметры в запросах и извращаться с самостоятельной конкатенацией запросов, проверкой на sql-инъекции, эскейпингом, обработкой локалей и форматов и прочим садомазохизмом при работе с СУБД.
Оказывается, bind-параметры влияют на производительность.

То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".

Я счас поискал в гугле про подобные проблемы - у людей с OSM подобная фигня с бинд-параметрами в Postgresql вылезла. Но это на таблице в 500 млн записей и очень хитрожопном запросе. Предполагаю, что с такими объемами на обычной опердени жопа начнется намного раньше, чем разница между планами хоть как-то повлияет.
Не говоря уже о том, что правильный план можно прибить гвоздями, как минимум в Firebird так точно и вообще не мучится.

[identity profile] zamotivator.livejournal.com 2010-03-06 09:27 pm (UTC)(link)
То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".
Не, батя, ты передёргиваешь.
Я лишь уточнил, чем bind-параметры плохи.
Годятся они в 90% случаев, но надо также понимать, когда они не годятся.

[identity profile] mr-st.livejournal.com 2010-03-06 10:27 pm (UTC)(link)
По моему основная проблема для опердени это уложить безумные бизнеспроцессы в более менее логичную схему. А потеря производительности на бинд параметрах настолько мелкая техническая проблема что и обсуждать нечего

[identity profile] ennor.livejournal.com 2010-03-06 11:07 pm (UTC)(link)
Смешно, да. Уж что-что, а драйверы доступа вылизываются так, как мало что иное - количество тестеров огромное же.

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

[identity profile] a-lourier.livejournal.com 2010-03-06 11:22 pm (UTC)(link)
bind бывает двух видов - когда подстановка значений идет на стороне клиента и когда на стороне сервера. Если это делает клиент, тогда сервер получает уже обычный запрос и его исполняет. От инъекций спасают оба варианта. Выбор между ними надо делать уже, исходя из особенностей СУБД и задачи.

[identity profile] vp.livejournal.com 2010-03-07 06:48 am (UTC)(link)
Почитал треды

Солидарен с этим:
"Ты знаешь на кого похож? На деда-ассемблерщика, которого заставили на ООП языке писать опердень и он экономит переменные на стеке и оптимизирует операции ассемблерными вставками, потому что когда-то в молодости ему не хватало памяти и скорости процессора."

Это какая-то мутная экономия.

[identity profile] madeveloper.livejournal.com 2010-03-07 09:57 am (UTC)(link)
Всякие обратно-коническо-резьбовые 10-минутные запросы нужно хинтить. Во всех остальных случаях при высокой нагрузке байнды дают выйгрыш в скорости, так как сервер использует уже распарсенные закешированные запросы.