SqlServer创建全文索引的详细步骤

 更新时间:2026年02月13日 10:52:50   作者:陈同学在学习C#  
本文详细介绍了如何在SQL Server中创建全文索引,包括前置检查、启用全文索引、创建全文目录、在表上创建全文索引以及首次填充索引的步骤,还介绍了创建完成后的验证方法和全文检索的正确用法,感兴趣的朋友跟随小编一起看看吧

✅ 一、SQL Server 全文索引创建步骤(完整可执行)

1.1 前置检查(必须通过)

全文索引不是默认功能,很多开发环境根本没装。 请先在 SSMS 执行以下命令验证:

-- 检查1:全文搜索组件是否已安装
SELECT SERVERPROPERTY('IsFullTextInstalled') AS IsFullTextInstalled;
  • 返回值 = 1:继续下一步
  • 返回值 = 0必须找DBA安装全文组件(SQL Server安装介质修复,添加“全文和语义提取搜索”功能)

1.2 为当前数据库启用全文索引

EXEC sp_fulltext_database 'enable';

注意:该命令并非所有SQL Server版本必须,但执行无害。若报错“已启用”,忽略即可 

1.3 创建全文目录(容器)

CREATE FULLTEXT CATALOG FT_Catalog_LogRequest 
WITH ACCENT_SENSITIVITY = OFF;
  • ACCENT_SENSITIVITY = OFF:匹配时忽略重音(对中文无影响,推荐)
  • 如果只需要一个默认目录,可执行 CREATE FULLTEXT CATALOG FT_Catalog_LogRequest AS DEFAULT;

1.4 在目标表上创建全文索引——这是你的核心需求

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 会使用默认语言(通常是英语)。英文分词器按空格分词,会把“托盘条码”整个当成一个词,根本无法匹配你输入的关键词,导致全文索引建了也白建 

1.5 首次填充索引(立即生效)

ALTER FULLTEXT INDEX ON dbo.LogRequests START FULL POPULATION;
  • 数据量大时此操作消耗I/O,建议在业务低峰期执行。
  • 执行期间,已有数据的检索功能不可用,但表本身的增删改查不受影响。

✅ 二、创建完成后的验证与查询

2.1 验证索引是否创建成功

-- 查看该表上的全文索引
SELECT * FROM sys.fulltext_indexes 
WHERE object_id = OBJECT_ID('dbo.LogRequests');
-- 查看全文目录下的所有索引
SELECT * FROM sys.fulltext_catalogs;

2.2 正确使用全文检索(严禁再用LIKE)

错误用法(全表扫描)

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), '托盘');

到此这篇关于SqlServer创建全文索引的详细步骤的文章就介绍到这了,更多相关SqlServer创建全文索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server 2016 Alwayson新增功能图文详解

    SQL Server 2016 Alwayson新增功能图文详解

    sqlserver2016发布有一段时间了,下面跟着脚本之家小编一起看看2016在Alwyson上做了哪些改进?需要的朋友通过本文了解下吧
    2017-09-09
  • SQL按指定字符分割字符串的方法

    SQL按指定字符分割字符串的方法

    在SQL中分割字符串通常需要使用特定的函数,因为SQL本身并不像编程语言那样直接支持字符串分割,不同的数据库系统有不同的函数来处理字符串分割,下面给大家介绍SQL按指定字符分割字符串的方法,感兴趣的朋友一起看看吧
    2025-03-03
  • Sql server 2012 中文企业版安装图文教程(附下载链接)

    Sql server 2012 中文企业版安装图文教程(附下载链接)

    这篇文章主要介绍了Sql server 2012 中文企业版安装图文教程(附下载链接),需要的朋友可以参考下
    2020-04-04
  • SQL Server服务启动的实现步骤

    SQL Server服务启动的实现步骤

    本文主要介绍了SQL Server服务启动的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • SQL Server中row_number函数的常见用法示例详解

    SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 使用SqlServer CTE递归查询处理树、图和层次结构

    使用SqlServer CTE递归查询处理树、图和层次结构

    递归CTE是SQL SERVER 2005中重要的增强之一。一般我们在处理树,图和层次结构的问题时需要用到递归查询。本文给大家详解使用sqlserver cte递归查询出来树、图和层次结构,本文介绍的非常详细,感兴趣的朋友一起看看吧
    2015-11-11
  • SQL Server高可用的常见问题分析

    SQL Server高可用的常见问题分析

    SQL Server高可用不就是微软的那几个技术吗,如Replication, Failover Clustering,本文将详细介绍,有需求的朋友可以参考下
    2012-11-11
  • 在SQL中该如何处理NULL值

    在SQL中该如何处理NULL值

    在日常使用数据库时,NULL值在数据库中是一个很特殊且有趣的存在,本文介绍了在SQL中该如何处理NULL值,感兴趣的可以了解一下
    2021-05-05
  • 浅谈为什么#{}可以防止SQL注入

    浅谈为什么#{}可以防止SQL注入

    本文主要介绍了浅谈为什么#{}可以防止SQL注入,#{} 匹配的是一个占位符,会对一些敏感字符进行过滤,编译过后会对传递的值加上双引号,因此可以防止 SQL 注入问题,感兴趣的可以来了解一下
    2022-05-05
  • SQL Server配置管理器无法打开的四种解决方法

    SQL Server配置管理器无法打开的四种解决方法

    本文总结了SQL Server配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07

最新评论