2012-10-16 6 views
1

이 예제를 고려하십시오 - 테이블 item에는 keyvalue의 두 열이 있습니다. 데이터는 다음과 같습니다 :InnoDB는 존재하지 않는 키를 캐시합니까?

> SELECT * FROM item; 

key  value 
------------------ 
    1   a 
    2   b 
    87   c 

1에서 100 사이의 임의 키로 SELECT 쿼리가 있고 데이터 집합이 큽니다. 내 질문은 :

  • 는 키 등 3과 4는하지가 존재하지 알고, 또는 때마다 디스크에 가야 있도록 InnoDB하지만 어떻게 든 "실종"키를 캐시하지?

  • 더미 레코드로 나머지 키 값을 채우면 성능이 향상 될 것입니까? The MySQL Query Cache 아래의 문서로

답변

0

Innodb는 자주 사용하는 페이지를 메모리에 저장하므로 모든 쿼리에서 디스크로 이동하지 않습니다 . 메모리 버퍼의 크기는 설정 파일 (일반적으로 my.cnf)에 정의되어 있으며, 옵션 이름은 innodb_buffer_pool_size이다. Innodb 파일은 운영 체제에 의해 캐시 될 수도 있습니다.

서버에서 사용할 수있는 메모리가 많은 경우 innodb_buffer_pool_size를 적절한 값으로 늘리십시오. 더 많은 정보 : http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/

더미 레코드를 삽입하면 테이블이 더 커집니다.

0

: 클라이언트로 전송 된 해당 결과와 함께 SELECT 문의

쿼리 캐시는 텍스트. 나중에 동일한 명령문이 수신되면 서버는 명령문을 다시 구문 분석하고 실행하는 대신 쿼리 캐시에서 결과를 검색합니다.

따라서 정확히 동일한 쿼리를 다시 실행하면 SELECT * FROM item의 캐시가 사용됩니다. SELECT * FROM item WHERE key = 3과 같은 다른 쿼리는이 쿼리의 캐시를 사용할 수 없습니다. 그러나 정확히 동일한 쿼리의 후속 호출은 자체 캐시 된 결과를 사용합니다.

0

색인에 누락 된 레코드에 대한 참조가 없으므로 색인이 더 느려서는 안됩니다. 레코드에 자동 증가가있는 기본 키 인덱스를 추가하여 색인 (pk, key, value)에 추가 할 수 있습니다.

관련 문제