4

我正在使用 SQL Server 2012。一个表有一个文本和一个日期列。文本列具有全文索引。查询针对全文列发出 CONTAINS,但它还需要在日期列中包含大于条件。我担心 SQL Server 合并来自 b 树和全文索引的结果的性能。

在 Oracle 中,通过将“正常”列(不受全文搜索)包含到全文索引 (CTXCAT) 中来解决此方案的性能方面,因此可以设置全文索引,如那:

ctx_ddl.create_index_set('auction_set');
ctx_ddl.add_index       ('auction_set', 'start_date');

然后像这样查询:

WHERE CATSEARCH (item_desc, '(toy dog) | "live animal"', 'start_date > ###') > 0

是否可以在 SQL Server 中将 b-tree 索引组合成全文索引?

解决 SQL Server 中混合(全文和 b 树)查询场景的最高效方法是什么?

谢谢。

4

1 回答 1

0

如果我正确理解您的问题,我认为您不会遇到任何问题。我经常将全文和 b-tree 结合起来,效果很好。当进行全文搜索时,它会将每个分隔的“术语”视为一个索引,就像它只具有一个术语的索引列一样(提供或获取一些 sql 统计信息)。无论哪种方式,SQL 都必须弄清楚它的执行路径。全文搜索不支持比较整数/日期值——更多的是用于匹配分隔数据的字符串。

我想你会想继续利用 b-tree 概念的效率来发挥你的优势。全文目录索引搜索在我看来是一个更全面的搜索,尽管在使用“LIKE”来解析/比较字符串的情况下更有利。

我要做的是:

 SELECT * FROM MyTable
  WHERE CONTAINS(columnName, '"Toy Dog" OR "live animal"')
    AND start_date > ###;

有关语法信息,请参阅此 msdn 文章

PS 当全文索引整数数据时,关闭停止列表,以便在目录索引中不会忽略这些值。

希望任何帮助!(没有人回答,所以我想我会给出我的经验)

于 2012-11-27T20:24:32.317 回答