全文检索允许在 Microsoft® SQL Server; 表内对字符数据进行基于单词或短语的索引全文检索由下面的基本组 件组成 全文索引启用了全文目录的创建和填充它们在 SQL Server 以外维护并且由 Microsoft 搜索服务管理 全文检索使用新的 TransactSQL 谓词(CONTAINSCONTAINSTABLEFREETEXT 和 FREETEXTTABLE)来查询这些已填充的 全文目录 全文索引 如果正在对不到一百万行的表进行全文索引那么几乎不需要进行性能优化如果对大型 SQL Server 表(其中包含创建 大型全文目录的上百万行)进行全文索引那么这会持续进行大量的读取和写入活动因此必须配置 SQL Server 和全文 目录以通过跨多个硬盘驱动器进行负载平衡来获得最优磁盘 I/O 性能同时还需要考虑硬件配置Microsoft Windows® 或 Windows NT® 系统配置SQL Server 配置全文目录和数据库文件的实际位置 硬件考虑事项 多个 CPU一到四个 MHz Xeon III 处理器 内存 到 GB 的物理 RAM 具有几个通道的多磁盘控制器或具有多通道的单磁盘控制器 磁盘 I/O 子系统RAID(没有容错保护的磁盘条带化)RAID+ 和 RAID Windows 或 Windows NT 系统配置的考虑事项 如果在 Windows NT Server 上安装 SQL Server那么 pagefilesys 文件的大小需要设置为可用物理 RAM 量的 到 倍在有较大 RAM 量的 Windows Server 上安装 SQL Server 时可以不用考虑这一条 Pagefilesys 文件需要放置在它们自己的驱动器(RAID 或 RAID+)上最好在单独的控制器或至少是与共享控制器分 离的单独通道上 SQL Server 配置的考虑事项 在大型表(超过一百万行)中进行完全填充后考虑将新特性 Change Tracking 与 Update Index in Background 和 Update Index 对 Incremental Population 一起使用有关何时使用 Change Tracking 对 Timestampbased incremental 填充的更多信息请参见维护全文索引 全文索引和目录考虑事项 全文索引或填充全文目录应该在系统活动较少时进行通常在数据库维护窗口完成 将全文目录文件放置在它自己的磁盘控制器上或有多个通道的单个磁盘控制器上单独的通道中 将数据库文件放置在与全文目录文件不同的独立的磁盘控制器上或有多个通道的单个磁盘控制器上单独的通道中 具有四百万或两千万行的 SQL 表的全文索引可能要花费几个小时或几天来完成考虑知识库文章 Q 中提供的选 项INF如何移动复制和备份 SQL 全文目录文件夹和文件 全文检索 如果正在对不到一百万行的表进行全文检索那么几乎不需要任何性能优化(一百万行只是常规的分界点)如果要对 超过一百万行的表进行全文检索请考虑适当的全文检索谓词(CONTAINS 与 CONTAINSTABLE 或 FREETEXT 与 FREETEXTTABLE)以及平均行数和查询超时的考虑事项 使用带有新的 top_n_by_rank 参数的 CONTAINSTABLE 或 FREETEXTTABLE 来限制返回的行数top_n_by_rank 指定只返回 以降序排列的前 n 个最高等级的匹配项仅当指定了整数值 n 时应用另外应该考虑使用 TOP 子句来限制在 CONTAINTSTABLE 或 FREETEXTTABLE 的结果集中返回的行数请查阅知识库文章 QFIX通过支持 TOP 改善全文 检索性能以获得更多信息 如果试图通过附加的 WHERE 子句限制从全文查询得到的结果那么 WHERE 子句是在与 SQL 表结果联接 (JOIN) 之后而非 之前应用否则结果集会不正确因为合格的行会从结果集中省略掉而没有任何对客户端的提示若要限制全文检索 查询的结果请使用 CONTAINSTABLE 或 FREETEXTTABLE 谓词中的 Top_N_Rank 参数 如果通过 Web 或 Microsoft Internet Information 服务 (IIS) 接口使用 SQL Server 全文检索并且正在搜索大型表 (超过一百万行)那么当使用 CONTAINS 或 FREETEXT 谓词时请考虑将 IIS 查询超时默认值增加 秒到 秒 如果在 SQL 查询中使用多个 CONTAINS 或 FREETEXT 谓词并发现全文检索查询性能较差请减少 CONTAINS 或 FREETEXT 谓词的数量或使用*在查询中使用所有全文索引列 在全文查询中使用任何一个全文谓词时例如 CONTAINS (pr_info between AND king)还可能遇到错误 查询 只包含忽略的单词单词between是一个忽略词或干扰词即使带有 OR 子句全文查询语法分析器也会将其视为一个 错误考虑将查询重新写为基于短语的查询并删除干扰词或考虑知识库文章 Q 中提供的选项INF正确分析 FTS 查询中的引号还请考虑使用 Windows Server它对索引服务的断词文件有一定增强 什么是 RANK 以及当与 CONTAINSTABLE 和 FREETEXTTABLE 谓词一起使用时如何确定 RANK?全文 RANK 值是根据包含唯一 词的行出现的频率确定的在确定返回行的 RANK 值中发挥作用的一个因素是这个唯一词在该行的全文索引列中出现的频 率另一个因素是唯一词在表中出现的总次数(这用于规范化概率)结果集中返回的 RANK 值是互相关联的因此不 可能将 RANK 值解释为百分比或将 RANK 值分组为高/中/低范围请将 RANK 视为一种对特定查询和结果集排序的方 法 当确定是在一个全文目录中包括多个 SQL 表还是每个全文目录一个 SQL 表时还有一些全文索引和检索的考虑事项 当考虑大型 SQL 表的这种设计问题时在性能和维护之间应进行权衡而您可能希望对您的环境测试这两种选项如果选 择在一个全文目录中有多个 SQL 表则会因运行全文检索查询时间较长而带来开销因为增量填充会强制所有其它 SQL 表的全文索引都放在该全文目录中如果选择每个全文目录具有一个单独的 SQL 表并对多个 SQL 表进行全文索引就 会引起维护单独的全文目录的开销(每个服务器总共只能有 个全文目录) |