나는 준비된 진술에 대해 많은 것을 읽었으며, 내가 읽은 모든 것에 대해 아무도 사용하지 않을 경우의 단점에 대해 이야기하지 않는다. 그러므로 사람들이 간과하는 경향이있는 "용들이있을 것"이라는 점이 있는지 궁금합니다.준비된 진술을 사용할 때 단점이 있습니까?
답변
준비된 문은 구문 분석되어 미리 컴파일 된 SQL
문으로 바운드 변수가 실행될 때까지 대기합니다.
실행 된 모든 명령문은 조만간 준비됩니다 (구문 분석, 최적화, 컴파일 및 실행해야 함).
준비된 문장은 구문 분석, 최적화 및 컴파일 결과를 재사용합니다.
보통 데이터베이스 시스템은 준비된 쿼리를 직접 사용하지 않더라도 쿼리 준비에 약간의 시간을 절약하기 위해 일종의 최적화를 사용합니다.
Oracle
예를 들어, 쿼리를 구문 분석 할 때 먼저 라이브러리 캐시가 검사되고 동일한 문이 이미 구문 분석 된 경우 캐시 된 실행 계획이 대신 사용됩니다.
이 대답은 준비된 문과 함께 중요한 문제가 누락 된 것으로 생각합니다. 질의 계획은 질의가 준비 될 때 존재하는 데이터 통계에 따라 최적화되고, 질의가 실행될 때 미래에는 최적이 아닐 수도있다. 따라서 이것은 준비된 진술의 단점입니다. – egbokul
비슷한 단점을 언급하는 몇 가지 기사 : https://medium.com/@devinburnette/be-prepared-7768d1a111e1 --- 및 --- https : //www.vividcortex.com/blog/2014/11/19/분석 준비된 성명서 - vividcortex/ – MarsAndBack
문을 한 번만 사용하거나 동적 SQL 문을 자동으로 생성하는 경우 (모든 매개 변수를 올바르게 이스케이프 처리하거나 매개 변수에 의 안전 문자 만있는 경우) 준비 문을 사용하지 않아야합니다.
물론 이것은 매우 드뭅니다. 나는 서버 측에 준비된 문장을 입력 해 둔화하는 것이 훨씬 쉽다는 것을 알았다. – Powerlord
제가 생각할 수있는 유일한 단점은 서버에서 메모리를 차지한다는 것입니다. 그다지 문제는 아니지만 문제가 될 수있는 몇 가지 중요한 경우가있을 수 있습니다.하지만 어떤 것도 생각하기가 어렵습니다.
prepared statement와 dynamic sql의 다른 작은 문제가 있습니다. 디버깅하기가 더 어려울 수 있습니다. 동적 SQL을 사용하면 항상 문제가있는 쿼리를 로그 파일에 기록하고 프로그램에서 보는 것과 똑같이 서버에서 직접 실행할 수 있습니다. 준비된 명령문을 사용하면 충돌 데이터에서 결정된 특정 매개 변수 집합을 사용하여 쿼리를 테스트하는 데 약간의 작업이 필요할 수 있습니다. 그러나 그보다 훨씬 더 많은 것은 아닙니다. 추가 보안으로 비용을 확실히 정당화 할 수 있습니다.
경우에 따라 데이터베이스 엔진은 준비된 문을 사용할 때 열등한 쿼리 계획을 수립 할 수 있습니다. 왜냐하면 데이터베이스 엔진은 준비에 대한 실제 바인딩 값을 가지지 않고 올바른 가정을 할 수 없기 때문입니다.
http://www.postgresql.org/docs/current/static/sql-prepare.html
에서 '메모'섹션 그래서으로 빠르게 어떤 알아 제표를 작성하지 않고 쿼리를 테스트 할 가치가있을 수도 있습니다. 모든 ORM이 그렇게 할 수있는 것은 아니지만 준비된 구문을 사용할지 여부를 결정할 수 있습니다.
나는 최선의 패턴이 준비된 문장에 all or nothing 접근법을 사용한다는 것을 발견했다. DBMS는 우리 대부분보다 더 똑똑하고 대부분의 시간에 가장 좋은 계획을 세울 수 있습니다. 또한 다른 DBMS에는 다른 쿼리 계획 전략이 있으므로 준비된 문에 대한 링크로 사용해서는 안된다는 것을 알고 있습니다. DBMS를 웹 작업에 사용하는 경우 SQL 주입 공격으로부터 방어하는 가장 빠르고 쉬운 방법은 준비된 문을 항상 사용하는 것입니다. – bakoyaro
- 1. AJAX를 RIA로 사용할 때 단점이 있습니까?
- 2. -Bymbolic-functions을 사용할 때 단점이 있습니까?
- 3. asp.net MVC를 사용할 때 어떤 단점이 있습니까?
- 4. 그런 진술을 어떻게 멋지게 사용할 수 있습니까?
- 5. ARC가 아닌 Objective-C 코드에서 __weak을 사용할 때 단점이 있습니까?
- 6. html에 비해 PHP를 사용할 때의 단점이 있습니까?
- 7. SEAM에 단점이 있습니까?
- 8. JMockit에는 단점이 있습니까?
- 9. 체이닝 세터 : 단점이 있습니까?
- 10. VS 설치 프로젝트 - 단점이 있습니까?
- 11. WcfBinding에서 sendtimeout이 증가하는 단점이 있습니까?
- 12. Hibernate를 사용할 때 최적의 준비된 명령문 캐시 크기를 결정하는 방법
- 13. ASP.NET을 사용하는 IIS6 HTTP 압축 : 단점이 있습니까?
- 14. MySQLi - 모든 진술을 준비해야합니까?
- 15. 쇼 페이지에서 준비된 colorbox/lightbox/thickbox 등을 사용할 수 있습니까?
- 16. C에서 진술을 시도 하시겠습니까?
- 17. 싱글 톤 패턴에 단점이 있습니까?
- 18. mysqli로 준비된 진술의 실제 SQL 가져 오기?
- 19. 준비된 문에 대한 함수
- 20. 준비된 명령문을 여러 번 리소스로 안전하게 사용할 수 있습니까?
- 21. SQL 준비된 문에서 산술 식을 사용할 수 있습니까?
- 22. 릴리스 빌드에서 디버그 기호를 남길 때 단점이 있습니까?
- 23. 왜 MySQLi는 진술을 준비 했습니까?
- 24. @ font-face를 사용하는 데는 단점이 있습니까?
- 25. WPF의 컨트롤 속성에 성능상의 단점이 있습니까?
- 26. 무효 대신에 이것을 반환하면 어떤 단점이 있습니까?
- 27. JDBCTemplate에서 준비된 문 사용
- 28. 진술을 마무리 할 때 SQLite로 이상한 오류가 발생합니다.
- 29. MacPorts와 RubyGems를 동시에 사용하면 어떤 단점이 있습니까?
- 30. 스크립트에서 php.ini 변수를 설정하면 어떤 단점이 있습니까?
IT의 모든 부분에 단점이 있습니다. 특정 문제에서 실제로 가치가 있는지 확인할 필요가 있습니다. :)이 링크에 그래서 http://stackoverflow.com/questions/535464/when-not-to-use-prepared-statements/537834 준비된 진술 단점에 대한 몇 가지 예제가 있습니다. – GmonC