3

MySQL Full Text Search 기능을 사용하려면 VARCHAR 유형의 필드에 전체 텍스트 색인을 정의하십시오. 행은 INSERT 및 UPDATE되므로, mysql은 인덱스를 최신으로 유지해야한다. 내 질문 : MySQL은 언제 FTS 인덱스를 다시 작성합니까? 즉시 INSERT 또는 UPDATE 후MySQL은 언제 FTS 인덱스를 다시 작성합니까?

  • A)는 그 인덱스에 영향을 발생한다.
  • B) 첫 번째 SELECT를 실행하면 최근에 UPDATE 또는 INSERT의 영향을받은 인덱스가 필요합니다.
  • C) 다른 것.

불필요한 배경 정보 : 내 경험은 옵션 B.는이 권리가 생각하는 것? 전체 텍스트 검색을 수행하는 갑작스런 임의의 느린 쿼리가 발생했기 때문에 어떤 쿼리가 느린 이유와 다른 쿼리가 느린 이유를 알지 못하기 때문에 질문합니다. 내 직감은 MySQL이 FTS 인덱스를 다시 작성하기를 기다리는 경우 쿼리가 느려질 수 있지만 이것이 MySQL의 작동 방식인지 여부는 알 수 없습니다.

# Query_time: 61.775612 Lock_time: 10.110924 Rows_sent: 20 Rows_examined: 222498 
SELECT SQL_CALC_FOUND_ROWS id 
FROM members 
WHERE 
    AND MATCH (bio,profile_text,name) AGAINST ('building surveyor') 
    AND MATCH (town, postcode, country) AGAINST ('united kingdom, liverpool'); 

을 주목 Lock_time : 임의의 슬로우 쿼리 (일반적으로 동일한 쿼리가 두 번째에서 실행), 느린 로그에 느린 UPDATE 또는 INSERT가없는 예. 느린 로그에서 다른 INSERT 또는 UPDATE를 볼 수 없으므로 기다리는 것이 확실하지 않습니다. 그렇다면 FTS 인덱스를 다시 작성할 때까지 기다릴 수 있다고 생각한 이유는 무엇입니까?

답변

1

... AGAINST('"building surveyor"')을 사용하면 두 단어가 어딘가에 흩어지는 대신 해당 구를 얻을 수 있습니다.

MyISAM 또는 InnoDB를 사용하고 있습니까? 그들은 다르게 작동합니다.

MyISAM, 업데이트 행이 삽입/업데이트 될 때 FT 색인이 업데이트됩니다.

InnoDB는 대기열이 변경되어 결국 디스크에 기록한다고 생각합니다. 이것은 일반적으로 MyISAM보다 쓰기가 더 빠릅니다.

아니요 엔진 은 명시 적으로 요청할 때를 제외하고는 색인을 다시 작성합니다.

관련 문제