2010-08-05 2 views
6

Я сделал несколько тестов, сначала я проверил готовую инструкцию mysql с $pdo->prepare() и $insert_sth->execute() для вложений 10k (с именованными параметрами, если это имеет значение), и потребовалось 301.MySQL подготовил операторы против производительности простых запросов

После этого я сделал простые вставки запросов и вставлял каждый раз для тех же 10k вставок тоже, и это заняло 303s.

Так что я хотел бы знать: действительно ли подготовленные заявления действительно дают преимущества в производительности? Потому что мои тесты не показывали его, или мне нужно оптимизировать мою версию готовых заявлений, чтобы они были быстрее?

Я могу указать исходный код, если это необходимо.

+0

Я предполагаю, что не было увеличения производительности b/c Простые запросы 'INSERT' не оптимизированы парсером запросов MySQL - в отличие от операторов SELECT. – raveren

+0

Я где-то читал, что PDO только «подделывает» подготовленный оператор, в то время как MySQLI на самом деле делает back-and-forth на сервере для настройки пространства памяти. – alfadog67

+0

Возможный дубликат [Должен ли я использовать подготовленные инструкции для MySQL в PHP PERFORMANCE-WISE?] (Http://stackoverflow.com/questions/2214408/should-i-use-prepared-statements-for-mysql-in-php- по производительности) – e4c5

ответ

1

INSERT s, скорее всего, IO-bound, поскольку они, как правило, не очень сложны с точки зрения SQL - просто список столбцов и данных для их ввода. Таким образом, то, что вы используете для выполнения запросов, не так важно во время выполнения, как объем данных, которые вы набиваете в базу данных, как быстро вы можете получить данные на сервер БД и насколько быстро сервер БД может хранить его.

+0

Да, но в документации сказано, что запрос кэшируется на сервере sql, и вы отправляете только параметры для вставок, поэтому сервер не должен проверять наличие ошибок и других повторяющихся действий, так теоретически, это должно быть некоторыми преимуществами производительности. – Centurion

+1

Да, но я говорю, что запрос в этом случае, как правило, довольно крошечный относительно * данных *, поэтому вы не видите существенной разницы, потому что любая фактическая разница мала относительно времени, затраченного на отправку данные, которые являются постоянными и большими. – Amber

+0

Спасибо, я постараюсь проверить более сложные заявления и увижу результаты. – Centurion

6

Я предпочитаю подготовленные заявления с точки зрения безопасности, а не производительности (не уверен, если это быстрее), например, чтобы избежать внедрения sql.

+0

Я согласен с вами в плане безопасности .. – Centurion

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