概念概述

在传统关系数据库系统中,当您搜索包含文本数据的列中的词或词组时,您会被限制使用 LIKE 或 MATCHES 条件。例如,如果您要返回表 videos 中 VARCHAR description 列包含词组 multimedia text editor 的所有行,您将限制为只能执行诸如以下内容的语句:
SELECT * FROM videos 
WHERE description LIKE '%multimedia text editor%';

虽然该 SELECT 语句会返回正确的行列表,但速度可能较慢,这取决于该表的大小以及 description 列中文本数据的量。这是因为列 description 上的传统辅助索引在这类搜索中是无效的,必须扫描整个表。

除速度慢之外,SQL 语句仅检索其输入数据与 LIKE 子句中显示的数据完全一致的行。例如,由于表中包含的词 multimedia 通常会误拼为 mulitmedia,因此就不能返回这样的行,即便这些行可能是您想要的。

如果您还想查找文档中包含的同义词或搜索词的其他拼写形式,那么您必须构造其 WHERE 子句包含多个 OR 的语句,如:
SELECT * FROM video
WHERE description LIKE '%multimedia text editor' OR
description LIKE '%multi-media text editor%' OR
description LIKE '%multimedia document editor%' OR
description LIKE '%multi-media document editor%';

通常,此类型 SELECT 语句的执行速度较慢。传统关系数据库系统无法执行这类复杂而快速的搜索。