0

我有两个问题。全文索引vs %%和聚簇索引

  1. 当我必须选择Integer类型列上的聚簇索引而不是通过字符串值类型列选择聚簇索引时,它有意义吗?

为什么?

聚集索引将导致每当因为新行不追加到索引的末尾,但在中间插入

我是正确的INSERT被处理的页面数据的顺序?选择Integer类型列的聚簇索引的其他原因是什么?或者我正朝错误的方向发展?

  1. 当我有搜索使用%...%串像下面的查询

    Select Column1 From Table1 Where Column1 Like '%SomeVal%' 
    

我有以下这个问题。

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

使用'%'的前缀将最好进行索引扫描。你的问题没有意义。而不是告诉我们你的感知解决方案,告诉我们你正试图解决的实际问题。 –

+0

@mitchwheat - 先生,我的查询是基于包含谓词。正如查询中所述。 – Pankaj

+0

这没有帮助..... –

回答

4
  1. 是,SQL服务器(和一般的计算机)在通过号码清单看起来比他们通过文本列表更快。这意味着搜索WHERE ID = 3的记录通常比WHERE FirstName ='BOB'更快。如果你的系统专注于追踪一个或另一个系统,比如当用户点击一个你可以选择存储ProductID或ProductName的产品时,这很好,ProductID将会更快。但是,如果WHERE子句中的唯一列是文本字段,就像您总是通过标题查找电影一样,那么您最好将聚集索引放在该列上。作为一般规则,我有一个带有聚集索引的整数ID字段,然后在另一个字段上放置一个非聚簇索引,但这取决于情况。 FTS是基于词的,而通配符(%)是基于模式的,所以如果您需要搜索文本字段中的“Patricia”,FTS可能是您的最佳选择,但是如果您需要搜索“ Pat%“寻找”Patrick“或”Pattie“或”Patricia“,FTS将无法正常工作。我希望这是有道理的。搜索StackOverflow或google“fts vs like”,你会得到一些关于此事的讨论。