2017-11-13 13 views
0

누구나이 동작에 대한 정보가 있습니까? 이상한 행동이 처음이다 나는이전체 텍스트 쿼리가 느리게 처음 실행 된 다음 빠른

"id" "select_type" "table" "type" "possible_keys" "key" "key_len" "ref" "rows" "Extra" 
"1" "SIMPLE" "mk" "fulltext" "SearchText" "SearchText" "0" \N "1" "Using where" 

검색 텍스트이 쿼리에 동일한 DB에

SELECT 
       mk.IdMedia      
      FROM 
       mediakeyword mk     
      WHERE 
       MATCH(mk.SearchText) AGAINST('+"france"' IN BOOLEAN MODE) > 0 

계획을 전체 텍스트 인덱스가 실행하고있어 엔진의 MyISAM

입니다 난 쿼리를 실행하면 계산 된 시간은 2,324 초이고 두 번째 시간은 0,015입니다. 왜?

mysql에 동일한 두 번째 동작을 지시하는 방법이 있습니까?

답변

1

FULLTEXT은 InnoDB에서 사용할 수 있습니다. 마이그레이션을 고려하십시오.

으로 이어질 수있는 두 가지 "첫 번째는 천천히, 두 번째는 빠르다"가 있습니다

  • 쿼리를 처음 실행하면, 그것은 디스크에서 인덱스 및/또는 데이터 블록을 가져 오기 위해해야 ​​할 수도 있습니다 . 두 번째로, 해당 블록은 RAM에 캐시되므로 훨씬 빠릅니다.

  • "쿼리 캐시"는 사용 가능한 경우 쿼리와 그 결과를 기록합니다. 따라서 이 정확히 인 경우 SELECT이 두 번 실행되면 이전에 계산 된 결과를 간단히 조회 할 수 있습니다.

+0

강제로 특정 테이블에 램을 사용하려면 몇 가지 조치가 있습니까? 이 경우 mediakeyword? InnoDB로 마이그레이션해야하는 이유는 무엇입니까? 감사합니다 – andrea

+0

일반적으로 RAM을 할당 수동 시도는 역화. (그리고 그렇게 할 방법이 없습니다.) 손상된 인덱스 또는 불일치 한 데이터를 얻거나 ..., InnoDB로 전환해야하는 이유를 논의 할 수 있습니다. 웹에는 그러한 목록이 많이 있습니다. –