sql >> Database >  >> RDS >> Mysql

Elke manier om fulltext-achtig zoeken op InnoDB te bereiken

gebruik een myisam fulltext-tabel om terug te indexeren in uw innodb-tabellen, bijvoorbeeld:

Bouw uw systeem met 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;

Nu de fulltext-zoektabel die we alleen zullen gebruiken om terug te indexeren in onze innodb-tabellen. U kunt rijen in deze tabel onderhouden door een trigger te gebruiken of nachtelijke batchupdates enz.

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;

Eindelijk de zoekprocedure die u oproept vanuit uw php/applicatie:

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');

Ik hoop dat dit helpt :)



  1. IO.FileNotFoundException in MySql.Data.dll:kan System.Security.Permissions niet laden

  2. Mogelijk om cross-database queries uit te voeren met PostgreSQL?

  3. Gegevens weergeven met indeling in Datagridview

  4. Wizard voor het importeren van gegevens in MySQL-werkbanktabel extreem traag