InnoDB의 유사 전체 텍스트 검색: 대체 접근 방식
전체 텍스트 검색은 MyISAM 테이블에서 기본적으로 지원되지만 InnoDB 사용자는 다음과 같은 문제를 겪을 수 있습니다. 유사한 기능을 구현하려고 할 때의 제한 사항. 이 문제를 해결하기 위해 MyISAM 전체 텍스트 테이블을 활용하여 InnoDB 데이터베이스로 다시 인덱싱하는 흥미로운 솔루션이 등장했습니다.
InnoDB 테이블 생성
초기 단계 필요한 InnoDB 테이블을 설정하는 작업이 포함됩니다. 이러한 테이블은 핵심 데이터 저장소 역할을 합니다. 예를 들어, 다음 스키마를 고려하십시오.
CREATE TABLE users (...) ENGINE=InnoDB; CREATE TABLE forums (...) ENGINE=InnoDB; CREATE TABLE threads ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, user_id INT UNSIGNED NOT NULL, subject VARCHAR(255) NOT NULL, created_date DATETIME NOT NULL, next_reply_id INT UNSIGNED NOT NULL DEFAULT 0, view_count INT UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (forum_id, thread_id) ) ENGINE=InnoDB;
전체 텍스트 테이블 설정
다음으로, 전체 텍스트 인덱싱 전용 MyISAM 테이블을 생성합니다. 이 테이블은 지정된 InnoDB 테이블 필드의 인덱싱을 용이하게 합니다.
CREATE TABLE threads_ft ( forum_id SMALLINT UNSIGNED NOT NULL, thread_id INT UNSIGNED NOT NULL DEFAULT 0, subject VARCHAR(255) NOT NULL, FULLTEXT (subject), PRIMARY KEY (forum_id, thread_id) ) ENGINE=MyISAM;
테이블 데이터 유지
InnoDB와 MyISAM 테이블 간의 동기화를 보장하려면 업데이트 방법을 구현하세요. 전체 텍스트 테이블. 이는 트리거 또는 야간 일괄 처리를 통해 달성할 수 있습니다.
검색용 저장 프로시저
전체 텍스트와 유사한 검색 기능을 활용하려면 MySQL 내에서 저장 프로시저를 생성하세요. . 이 절차는 MyISAM 테이블을 쿼리하고, 제공된 검색어를 기반으로 결과를 필터링하고, 가장 관련성이 높은 일치 항목을 반환합니다.
DELIMITER # CREATE PROCEDURE ft_search_threads ( IN p_search VARCHAR(255) ) BEGIN SELECT t.*, f.title AS forum_title, u.username, MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) AS rank FROM threads_ft tft INNER JOIN threads t ON tft.forum_id = t.forum_id AND tft.thread_id = t.thread_id INNER JOIN forums f ON t.forum_id = f.forum_id INNER JOIN users u ON t.user_id = u.user_id WHERE MATCH(tft.subject) AGAINST (p_search IN BOOLEAN MODE) ORDER BY rank DESC LIMIT 100; END;
이 저장 프로시저를 호출하고 검색어를 제공함으로써 사용자는 관련 결과를 검색할 수 있습니다.
이 접근 방식은 InnoDB와 MyISAM의 장점을 모두 활용하여 InnoDB 테이블 내에서 전체 텍스트와 유사한 검색 기능을 구현하기 위한 실행 가능한 대안을 제시합니다. 엔진.
위 내용은 인덱싱을 위해 MyISAM을 사용하여 InnoDB 테이블에서 전체 텍스트 검색을 어떻게 구현할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!