2010-08-05 6 views
6

나는 몇 가지 테스트를했다. 우선 mysqp prepared statement에 $pdo->prepare()$insert_sth->execute()을 10k 인서트 (중요한 경우 명명 된 매개 변수가 있음)로 테스트했으며 301 초가 걸렸다.MySQL의 prepared statements 대 단순한 쿼리 성능

그 후 간단한 인서트 쿼리를 작성하고 매번 같은 10k 인서트를 삽입 할 때마다 303s가 걸렸습니다.

그래서 알고 싶습니다. 준비된 진술이 실제로 성능 이점을 제공합니까? 내 테스트에서 보여주지 않았기 때문에 또는 준비된 명령문 버전을 최적화하여 신속하게 수행해야합니다.

필요한 경우 내 소스 코드를 제공 할 수 있습니다.

+0

성능 향상이 없었음에도 불구하고 간단한 INSERT 쿼리는 SELECT 문과 달리 MySQL 쿼리 파서에 의해 최적화되지 않았습니다. – raveren

+0

필자는 PDO가 준비된 문장만을 "가짜"라고 읽은 반면, MySQLI는 메모리 공간을 설정하기 위해 실제로 서버를 앞뒤로 움직인다. – alfadog67

+0

가능한 복제본 [PHP 성능에 현명한 MySQL에서 준비된 문구를 사용해야합니까?] (http://stackoverflow.com/questions/2214408/should-i-use-prepared-statements-for-mysql-in-php- 성능 측면에서) – e4c5

답변

1

INSERT은 일반적으로 SQL 측면에서 그리 복잡하지 않기 때문에 IO 바인딩이 가능합니다. 따라서 쿼리를 수행하는 데 사용하는 데이터는 데이터베이스에 저장되는 데이터의 양, DB 서버로의 데이터 전송 속도 및 DB 서버의 속도와 같이 런타임에 그리 중요하지 않습니다. 그것을 저장할 수 있습니다.

+0

예하지만 설명서에서는 SQL Server에서 쿼리가 캐시되고 삽입에 대한 매개 변수 만 보내므로 서버는 오류 및 기타 반복적 인 동작을 확인할 필요가 없으므로 이론적으로, 성능상의 이점이 있어야합니다. – Centurion

+1

네,하지만 제가 말하고자하는 것은이 경우 쿼리는 일반적으로 * data *에 비해 상대적으로 매우 작기 때문에 어떤 차이가 없기 때문에 큰 차이는 보이지 않습니다. 데이터는 일정하고 크다. – Amber

+0

감사합니다. 더 복잡한 명령문을 테스트하고 결과를 볼 것입니다. – Centurion

6

저는 SQL 주입을 피하기 위해 성능보다는 보안 측면에서 준비된 구문을 사용하는 것이 더 빠르다는 것을 확신하지 못합니다.

+0

나는 보안 측면에서 당신과 동의합니다. – Centurion