2009-08-23 3 views
0

Многие люди знают, что важно использовать параметризованные запросы для предотвращения атак с SQL-инъекциями.производительность параметризованных запросов для разных db

Параметрированные запросы также выполняются быстрее в sqlite и oracle при обработке онлайн-транзакций, потому что оптимизатор запросов не должен повторно обрабатывать каждый параметризованный оператор sql перед выполнением. Я видел, как sqlite становится в 3 раза быстрее, когда вы используете параметризованные запросы, оракул может стать в 10 раз быстрее, когда вы используете параметризованные запросы в некоторых случаях с большим количеством параллелизма.

Как насчет других db как mysql, ms sql, db2 и postgresql?

Существует ли разница в производительности между параметризованными запросами и литералами?

ответ

1

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

2

В отношении MySQL MySQLPerformanceBlog reported некоторые контрольные показатели запросов в секунду с незастроенными операторами, подготовленными операциями и запросами кэшированных операторов. Их вывод состоит в том, что подготовленные заявления на самом деле 14,5% быстрее, чем незаготовленные операторы MySQL. Перейдите по ссылке для получения дополнительной информации.

Конечно, соотношение зависит от запроса.

Некоторые люди полагают, что есть некоторые накладные расходы, потому что вы делаете дополнительный раунд от клиента к РСУБД - один для подготовки запроса, второй - для передачи параметров и выполнения запроса.

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

+1

Сегодня потребность в дополнительном обратном маршруте для подготовки параметризованных запросов почти устранена, так как многие СУБД поддерживают параметризованные запросы, идентифицированные с помощью равенства строки SQL. –

+0

(продолжение комментария): Например, с sp_executesql на SQL Server или «немедленно выполнить» в Oracle. Методы «подготовки», которые все еще доступны на многих языках, которые извлекают идентификатор запроса из БД, могут использоваться только в контексте соединения и подвержены ошибкам программирования (например, при вызове «подготовить» перед каждым запросом). Строковые идентификаторы SQL могут быть повторно использованы во всем или даже в нескольких приложениях. –

Смежные вопросы