2013-09-29 1 views
-2

내가 구글에서 "문 캐시"위키에 대해 읽어하지만 난 "문 캐시"의 평균 구글에있어서, 상기 데이터베이스에 "문 캐시를"이해 할 수없는 : -"Statement Caches"는 무엇을 의미합니까?

데이터베이스가 문 캐시를 수행하도록 조정됩니다 . 그들은 보통 종류의 명령문 캐시를 포함합니다. 이 캐시는 문 자체를 키로 사용하며 액세스 계획은 해당하는 문으로 캐시에 저장됩니다. 이렇게하면 데이터베이스 엔진이 이전에 실행 된 문 에 대한 계획을 다시 사용할 수 있습니다. 예를 들어 데이터베이스에 "select a, b from t where c = 2"와 같은 명령문을 보낸 경우 계산 된 액세스 계획이 캐시됩니다. 나중에 동일한 문 을 보내면 데이터베이스가 이전 액세스 계획을 다시 사용할 수 있으므로 CPU 전력을 절약 할 수 있습니다. 그러나 전체 문장이 핵심입니다. 예제의 경우 나중에 "select a, b from t from c = "과 같은 문구를 보내면 액세스 계획을 찾을 수 없습니다. 이는 "c = 3"이 캐시 된 계획 "c = 2"와 다른 이기 때문입니다. 따라서, 예를 들어 :

For(int I = 0; I < 1000; ++I) 
    { 
      PreparedStatement ps = conn.prepareStatement("select a,b from t where c = " + I); 
      ResultSet rs = Ps.executeQuery(); 
      Rs.close(); 
      Ps.close(); 
    } 

다음은 캐시가 사용되지 않습니다. 루프를 반복 할 때마다 다른 SQL 문이 데이터베이스에 전송됩니다. 새로운 접근 계획은 각 반복마다 으로 계산되며, 우리는 기본적으로 접근 방식을 사용하여 CPU주기를 버리고 있습니다. 그러나 다음 스 니펫을 살펴보십시오. PreparedStatement ps = conn.prepareStatement ("select a, b from t where c =?");

For(int I = 0; I < 1000; ++I) { 
     ps.setInt(1, I); 
     ResultSet rs = ps.executeQuery(); 
     Rs.close(); } 

ps.close(); 여기서는 훨씬 더 효율적입니다. 에게 전송 된 진술은 '?'문자를 사용하여 매개 변수화됩니다. 마커에있는 SQL. 이 은 모든 반복이 "c =?"매개 변수가 다른 데이터베이스에 동일한 명령문을 보내는 것을 의미합니다. 부품. 그러면 데이터베이스 이 명령.에 대한 액세스 플랜을 재사용하고 프로그램 을 데이터베이스 내에서 더 효율적으로 실행하게합니다. 기본적으로 응용 프로그램을 실행하거나 데이터베이스에 사용자가 더 많은 CPU를 사용할 수있게합니다.

하지만이 코드를 이해할 수 없으므로이 줄 위의 아이디어를 누군가에게 제공하십시오.

+0

http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html 잘 설명합니다. –

+0

당신은 무엇을 이해할 수 없습니까? 구체적인 질문을하면 대답 해 보겠습니다. 그러나 내가 긴 설명을 게시하면, 아마도 "나는 또한 그것을 이해할 수 없다"라고 말할 것입니다; 내 시간은 낭비 될 것입니다.그러니 다시 읽고 그 링크를 읽고, 당신이 그것을 이해할 수 있도록하기 위해 내가 대답해야 할 질문에 대해 생각해보십시오. –

답변

1

SQL을 실제 작업으로 변환하는 데 시간과 노력이 필요합니다. 주어진 SQL 문의 결과에 주목하면 동일한 SQL 문이 다시 발행되어 더 빠른 응답을 제공하면 조치를 쉽게 재사용 할 수 있습니다.

캐시는 이러한 시간 절약 모음입니다.

준비된 문장은이를 위해 설계된 자리 표시 자의 특수한 변형입니다. 매번 "이 SQL 이해"부분을 다시 할 필요없이 각 요청에 대해 자리 표시자가 제공됩니다.

관련 문제