全文索引与%%和聚集索引

时间:2012-06-19 03:49:35

标签: sql-server sql-server-2008 sql-server-2005 full-text-search clustered-index

我有两个问题。

  1. 当我必须在Integer类型列上选择聚簇索引而不是在字符串值类型列上选择它时,它是否有意义。
  2. 为什么?

    只要处理了INSERT,聚集索引就会导致页面数据的重新排序,因为新行未附加到索引的末尾但插入到中间

    我是对的?选择Integer类型列的聚簇索引的任何其他原因?或者我的方向错了?

    1. 当我必须使用%...%搜索字符串时,如下面的查询

      Select Column1 From Table1 Where Column1 Like '%SomeVal%'
      
    2. 我有以下问题。

      1. 在上述情况下使用%....%是否有意义?
      2. 我可以为Column1添加聚集索引,然后转到%....%
      3. 我应该选择全文索引吗?如果是这样,为什么我更喜欢全文索引%...%

1 个答案:

答案 0 :(得分:4)

  1. 是的,SQL Server(以及一般的计算机)查看数字列表比通过文本列表更快。这意味着搜索WHERE ID = 3的记录通常比WHERE FirstName ='BOB'更快。如果您的系统适合跟踪其中一个,那就非常有用,例如当用户点击您可以选择存储ProductID或ProductName的产品时,ProductID将更快地拉动。但是,如果那个WHERE子句中唯一的列是文本字段,就像你总是按照标题查找电影一样,那么你可能最好将聚簇索引放在该列上。作为一般规则,我有一个带有聚簇索引的整数ID字段,然后在另一个字段上放置一个非聚集索引,但这实际上取决于具体情况。

  2. FTS是基于字的,而通配符(%)是基于模式的,因此如果您需要搜索“Patricia”的文本字段,FTS可能是您的最佳选择,但如果您需要搜索“Pat%”要寻找“Patrick”或“Pattie”或“Patricia”,FTS将无法正常运作。我希望这是有道理的。搜索StackOverflow或google获取“fts vs like”,您将就此事进行一些讨论。