は、例えば、バックあなたのInnoDBテーブルへのインデックスへのMyISAM全文テーブルを使用した辞書機能です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, -- gonna want to search this... !!
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) -- composite clustered PK index
)
engine=innodb;
ここでは、私たちのinnodbテーブルにインデックスを戻すために使用するフルテキスト検索テーブルです。このことができます
drop procedure if exists ft_search_threads;
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;
call ft_search_threads('+innodb +clustered +index');
希望:あなたは、あなたのPHP /アプリケーションから呼び出す検索ストアドプロシージャ最後に
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), -- fulltext index on subject
primary key (forum_id, thread_id) -- composite non-clustered index
)
engine=myisam;
などのトリガーや夜間のバッチ更新を使用するか、このテーブルの行を維持することができます)
innodbはフルテキスト検索をサポートしていません... – ajreal
非常にありがとうございました。あなたに非常に感謝しています:) – steve