> 데이터 베이스 > MySQL 튜토리얼 > 인덱싱을 위해 MyISAM을 사용하여 InnoDB 테이블에서 전체 텍스트 검색을 어떻게 구현할 수 있습니까?

인덱싱을 위해 MyISAM을 사용하여 InnoDB 테이블에서 전체 텍스트 검색을 어떻게 구현할 수 있습니까?

Susan Sarandon
풀어 주다: 2024-12-22 05:13:09
원래의
267명이 탐색했습니다.

How Can I Implement Full-Text Search on InnoDB Tables Using MyISAM for Indexing?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿