2010-03-12 6 views
5

최근에 나는 블로그를 통해 mysql에서 PDO를 사용하는 것에 대해 몇 가지주의를 기울 였고 PDO에 대한 내 견해가 바뀌었다. 점은 다음과 같습니다PDO in mysql 성능

  1. 기본 준비된 명령문은 낮은 성능의 결과로, 쿼리 캐시를 이용할 수 없습니다.

  2. 기본 준비된 명령문은 기본이 제대로 잘못된 결과의 결과로, 어떤 다른 "SHOW"쿼리의 열 길이를 전달하지 않는 제표를 작성 "쇼 테이블"

  3. 처럼 쿼리의 certains 유형을 실행할 수 없습니다. 기본 준비된 문을 사용하여 저장 프로 시저를 여러 번 호출

  4. 드롭 할 수있는 연결됩니다.

이에 사람의 의견을 주시겠습니까?

웹 응용 프로그램에서 쿼리 캐시를 원했습니다. 내 웹 사이트의 성능 문제를 고려한 후 PDO를 사용하도록 웹 응용 프로그램을 옮길 준비를하고 있습니다. 아무도 나에게 제안 할 수 있습니까?

미리 감사드립니다.

+1

[this] (http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/)라고 생각하는 블로그 링크를 추가해야합니다. 저자는 "2006 년에 내가 이것을 썼을 때, 네, 그것은 사실이었습니다."그리고 "이것이 이후에 해결되었는지 여부는 모르겠다 - 나는 몇 년 후에 그렇게되기를 희망한다." 누군가 첫 번째 요점이 잘못되었다고 지적했다. 따라서 아래에서 허용되는 답변은 더 이상 적용되지 않을 수 있습니다. –

답변

5

  • 첫 번째 포인트 쇼와 SHOW TABLES 일반적으로 저장 프로 시저와 함께 준비 statemends를 사용
  • 스피 대부분의 사용 사례에서 사용되지 명령하고하지 않은
  • 에게 적합한 그러나 그런 문제를 경험했다.

당신은 쿼리 캐싱을 사용하려면 다음 명령을 사용할 수 있습니다 :

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 

이 명령은에 PHP 5.1.3에서 사용할 수 있습니다.

2

준비된 문은 쿼리 캐시를 사용하십니까하지만 조건이 가지고 : 5.1 문서에서

:

을 befor를 MySQL 5.1.17에서는 prepared statement가 query cache를 사용하지 않는다.() mysql_stmt_prepare() 및 mysql_stmt_execute을 사용하여 이진 프로토콜을 사용하여 발행

  • 문구 : 5.1.17부터 준비된 문 제조 방법에 따라 달라 특정 조건 하에서 쿼리 캐시를 사용한다.
  • PREPARE 및 EXECUTE를 사용하여 텍스트 (이진이 아닌) 프로토콜을 사용하여 발급되는 명령문. 12.6 절. "준비된 문장을위한 SQL 구문"을 참조하십시오.5.5 문서가로 다시 말한다

: mysql_stmt_prepare() 및 mysql_stmt_execute()를 사용하여 바이너리 프로토콜을 사용하여 발행

준비된 문은 캐싱에 대한 제한이 적용됩니다. 쿼리 캐시의 문과의 비교는 확장 후 명령문의 텍스트를 기반으로합니까? 매개 변수 표시 자. 명령문은 2 진 프로토콜을 사용하여 실행 된 다른 캐시 된 명령문과 만 비교됩니다. 즉, 조회 캐시 목적을 위해 2 진 프로토콜을 사용하여 발행 된 준비된 명령문은 텍스트 프로토콜을 사용하여 발행 된 준비된 명령문과 구별됩니다.

+0

"MySQL 5.1.17 이전 버전에서는 준비된 명령문이 쿼리 캐시를 사용하지 않았습니다. 준비된 명령문은 5.1.17부터 준비 방법에 따라 다른 조건에서 쿼리 캐시를 사용합니다. mysql_stmt_prepare()와 mysql_stmt_execute()를 사용하는 바이너리 프로토콜 " – thomasrutter

+0

@thomasrutter - 문서에 연결하는 대신 문서를 인용하는 것이 좋습니다. 더 도움이 될 문서를 추가했습니다. – SeanDowney

+0

해당 텍스트 아래에 몇 가지 자격이 있습니다. 예를 들어 캐싱은 "?"확장 후에 수행됩니다. 매개 변수가 있으며 PREPARE와 EXECUTE 중 어떤 것을 사용하는지 또는 prepare() API 함수를 사용하는지 여부에 따라 유의해야 할 몇 가지 사항이 있습니다. – thomasrutter