>데이터 베이스 >MySQL 튜토리얼 >MySQL의 InnoDB 테이블에서 전체 텍스트와 유사한 검색을 어떻게 달성할 수 있습니까?

MySQL의 InnoDB 테이블에서 전체 텍스트와 유사한 검색을 어떻게 달성할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-17 13:52:09904검색

How Can I Achieve Fulltext-Like Search on InnoDB Tables in MySQL?

InnoDB에서 전체 텍스트와 유사한 기능을 사용하여 MySQL 데이터 검색

InnoDB 테이블에서 문자열 검색에 "LIKE"를 사용하는 기존 접근 방식은 문제가 있습니다. 성능 제한 및 각 검색어를 개별적으로 확인해야 하는 필요성을 방지합니다. 검색 기능을 강화하려면 InnoDB 테이블에서 전체 텍스트 검색을 모방하는 솔루션이 바람직합니다.

해결책: 인덱싱을 위해 별도의 MyISAM 테이블 활용

이 접근 방식에는 별도의 테이블을 생성하는 작업이 포함됩니다. InnoDB 테이블을 미러링하는 MyISAM 테이블. MyISAM 테이블에는 "FULLTEXT" 키워드로 인덱싱된 추가 열이 포함되어 있습니다. 이 MyISAM 테이블을 행 데이터로 채워서 전체 텍스트와 유사한 빠른 검색 기능을 지원하는 인덱스를 효과적으로 생성합니다.

구현

다음 예를 고려하세요.

-- InnoDB tables
CREATE TABLE users (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE forums (id INT, name VARCHAR(255), PRIMARY KEY (id));
CREATE TABLE threads (id INT, subject VARCHAR(255), user_id INT, forum_id INT, PRIMARY KEY (id));

-- MyISAM fulltext table
CREATE TABLE threads_ft (id INT, subject VARCHAR(255), FULLTEXT(subject), PRIMARY KEY (id));

동기화 중 데이터

MyISAM 전체 텍스트 테이블을 최신 상태로 유지하려면 트리거, 일괄 업데이트 또는 기타 적절한 메커니즘을 사용할 수 있습니다.

검색 쿼리 수행

이제 전문과 같은 검색이 가능해졌습니다 쿼리:

-- Stored procedure for searching
CREATE PROCEDURE ft_search_threads(IN p_search VARCHAR(255))
BEGIN
  SELECT *
  FROM threads_ft
  WHERE MATCH(subject) AGAINST (p_search IN BOOLEAN MODE)
  ORDER BY RANK() DESC;
END;

-- Example query
CALL ft_search_threads('keyword1 keyword2 keyword3');

이점

이 접근 방식은 다음과 같은 이점을 제공합니다.

  • Sphinx의 오버헤드 없이 전체 텍스트와 유사한 검색 기능 또는 기타 외부 도구
  • 'LIKE'에 비해 빠른 검색 성능 쿼리
  • 단순화된 구현 및 유지 관리

위 내용은 MySQL의 InnoDB 테이블에서 전체 텍스트와 유사한 검색을 어떻게 달성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.