Очередной срачъ, у zabivator-а
Mar. 6th, 2010 08:58 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Я всегда думал, что может заставить людей не использовать связываемые параметры в запросах и извращаться с самостоятельной конкатенацией запросов, проверкой на sql-инъекции, эскейпингом, обработкой локалей и форматов и прочим садомазохизмом при работе с СУБД.
Оказывается, bind-параметры влияют на производительность.
То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".
Я счас поискал в гугле про подобные проблемы - у людей с OSM подобная фигня с бинд-параметрами в Postgresql вылезла. Но это на таблице в 500 млн записей и очень хитрожопном запросе. Предполагаю, что с такими объемами на обычной опердени жопа начнется намного раньше, чем разница между планами хоть как-то повлияет.
Не говоря уже о том, что правильный план можно прибить гвоздями, как минимум в Firebird так точно и вообще не мучится.
Оказывается, bind-параметры влияют на производительность.
То, что он формально прав, и что, зная значения параметров, СУБД может выбрать более оптимальный план, не меняет того факта, что это сродни ассемблерным вставкам и экономии на количестве переменных на стеке при разработке опердени, чтобы "работало быстрее".
Я счас поискал в гугле про подобные проблемы - у людей с OSM подобная фигня с бинд-параметрами в Postgresql вылезла. Но это на таблице в 500 млн записей и очень хитрожопном запросе. Предполагаю, что с такими объемами на обычной опердени жопа начнется намного раньше, чем разница между планами хоть как-то повлияет.
Не говоря уже о том, что правильный план можно прибить гвоздями, как минимум в Firebird так точно и вообще не мучится.
no subject
Date: 2010-03-06 09:27 pm (UTC)Не, батя, ты передёргиваешь.
Я лишь уточнил, чем bind-параметры плохи.
Годятся они в 90% случаев, но надо также понимать, когда они не годятся.
no subject
Date: 2010-03-06 09:53 pm (UTC)no subject
Date: 2010-03-06 09:56 pm (UTC)Я разработкой OLAP базы занимаюсь, у нас запросы выполняются от 10 минут и выше, данных много (десятки гигабайт в лучшем случае).
Так что не использовать гистограммы при построении запросов с ?x или выводить тип для LPAD как varchar(8000) - смерти подобно.
В то же время уверен, что большинство веб-приложений запросы сложнее одного джойна и where id = ?1 не используют.
От ситуации зависит, короче.
no subject
Date: 2010-03-06 10:07 pm (UTC)no subject
Date: 2010-03-06 10:12 pm (UTC)Да, для веб-приложений это всё мышиная возня, если подумать. Для того и посоветоваться пришёл.
Кстати, а bind-параметры 100% предохранят от sql-injection?
Я вот не могу придумать, как они могут протекать, но как бэ бережённого бог бережёт
no subject
Date: 2010-03-06 11:51 pm (UTC)no subject
Date: 2010-03-06 10:27 pm (UTC)no subject
Date: 2010-03-06 11:07 pm (UTC)При такой аргументации автоматизация бизнес-процессов такими монстрами, как шарепойнт или аксапта, должна выглядеть... я даже не знаю, чем :)))
no subject
Date: 2010-03-06 11:18 pm (UTC)Понимаете, у меня просто профессиональная деформация =))) Когда оптимизируешь движок на тему эффективного выполнения запросов, sharepoint и ORM'ы выглядят издевательством над твоей работой ))))
no subject
Date: 2010-03-07 05:38 am (UTC)no subject
Date: 2010-03-07 01:27 pm (UTC)no subject
Date: 2010-03-07 02:21 pm (UTC)no subject
Date: 2010-03-07 02:25 pm (UTC)no subject
Date: 2010-03-07 02:35 pm (UTC)no subject
Date: 2010-03-07 02:39 pm (UTC)Решается bind-параметрами.
no subject
Date: 2010-03-07 02:40 pm (UTC)no subject
Date: 2010-03-07 03:35 pm (UTC)no subject
Date: 2010-03-07 11:14 am (UTC)no subject
Date: 2010-03-07 02:20 pm (UTC)no subject
Date: 2010-03-07 03:12 pm (UTC)no subject
Date: 2010-03-07 09:50 pm (UTC)no subject
Date: 2010-03-08 01:51 pm (UTC)Жизнь несколько неприятнее, чем теории.
no subject
Date: 2010-03-07 01:17 am (UTC)Хм, у меня была масса разных опытов. Например, в Оракле 10.1 JDBC запрос с типа больше 7 или 10 параметров не работает. Почему? Ну бага. Что делать? Ждать следующего релиза. Через год всё будет.
no subject
Date: 2010-03-07 05:36 am (UTC)no subject
Date: 2010-03-07 11:16 am (UTC)no subject
Date: 2010-03-06 11:22 pm (UTC)no subject
Date: 2010-03-07 06:48 am (UTC)Солидарен с этим:
"Ты знаешь на кого похож? На деда-ассемблерщика, которого заставили на ООП языке писать опердень и он экономит переменные на стеке и оптимизирует операции ассемблерными вставками, потому что когда-то в молодости ему не хватало памяти и скорости процессора."
Это какая-то мутная экономия.
no subject
Date: 2010-03-07 09:57 am (UTC)