一、SQL Server 全文索引创建步骤(完整可执行) 全文索引并非 SQL Server 默认开启的服务,许多开发环境甚至未安装相关组件。在正式开始创建前,需先确认环境是否就绪。这一步骤虽然基础,但往往是容易出现问题的环节。 1.1 前置检查(必须通过) 全文索引不是默认功能,很多开发环境根
全文索引并非 SQL Server 默认开启的服务,许多开发环境甚至未安装相关组件。在正式开始创建前,需先确认环境是否就绪。这一步骤虽然基础,但往往是容易出现问题的环节。
全文索引不是默认功能,很多开发环境根本没有安装。 请在 SSMS 中执行以下命令进行验证:
长期稳定更新的攒劲资源: >>>点此立即查看<<<

-- 检查1:全文搜索组件是否已安装
SELECT SERVERPROPERTY('IsFullTextInstalled') AS IsFullTextInstalled;
如果返回 0,后续操作将无法进行,请务必先解决此问题。
EXEC sp_fulltext_database 'enable';
注意:该命令并非所有版本都必须执行,但执行后不会产生负面影响。如果系统提示“已启用”,直接忽略即可。
CREATE FULLTEXT CATALOG FT_Catalog_LogRequest WITH ACCENT_SENSITIVITY = OFF;
ACCENT_SENSITIVITY = OFF:匹配时忽略重音,对中文无影响,推荐使用此设置CREATE FULLTEXT CATALOG FT_Catalog_LogRequest AS DEFAULT;CREATE FULLTEXT INDEX ON dbo.LogRequests(
ParamJson -- 需要进行高速检索的大字段
LANGUAGE 2052, -- 2052 = 简体中文。必须指定,否则中文分词将失效
ApiMethod, -- (可选)其他需要全文检索的字段
SysCode -- (可选)
)
KEY INDEX PK_LogRequests -- 表的主键名,必须为单列、唯一、非空
ON FT_Catalog_LogRequest -- 全文目录名,使用上一步创建的目录
WITH (
CHANGE_TRACKING AUTO, -- 自动跟踪数据变更(推荐使用)
-- 或:CHANGE_TRACKING MANUAL, 手动更新;
STOPLIST = SYSTEM -- 使用系统停用词表
);
关于 LANGUAGE 2052 的重要性,需要特别说明:
如果不指定 LANGUAGE 2052,SQL Server 将默认使用英语分词器。英文分词器按空格切词,像“托盘条码”这样的中文词会被视为一个整体,搜索“托盘”时将无法匹配,全文索引的效果将大打折扣——这是最常见的错误之一。
ALTER FULLTEXT INDEX ON dbo.LogRequests START FULL POPULATION;
-- 查看该表上的全文索引
SELECT * FROM sys.fulltext_indexes WHERE object_id = OBJECT_ID('dbo.LogRequests');
-- 查看全文目录下的所有索引
SELECT * FROM sys.fulltext_catalogs;
错误用法(全表扫描):
SELECT * FROM LogRequests WHERE ParamJson LIKE '%托盘条码123%';
正确用法(秒级响应):
-- 精确匹配关键词 SELECT Id, ApiMethod, RequestTime FROM LogRequests WHERE CONTAINS(ParamJson, '托盘条码123'); -- 多个关键词(AND 关系) SELECT Id, ApiMethod, RequestTime FROM LogRequests WHERE CONTAINS(ParamJson, '托盘 AND 条码'); -- 短语匹配(完全包含) SELECT Id, ApiMethod, RequestTime FROM LogRequests WHERE CONTAINS(ParamJson, '"托盘条码123"'); -- 同时检索多个字段 SELECT Id, ApiMethod, RequestTime FROM LogRequests WHERE CONTAINS((ParamJson, ApiMethod), '托盘');
全文索引创建完成后,LIKE '%关键词%' 应停止使用。改用 CONTAINS 不仅能实现秒级返回,还能支持 AND、OR、短语匹配等灵活查询,这才是真正的高效检索方式。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述