我有两个问题。
Integer
类型列上选择聚簇索引而不是在字符串值类型列上选择它时,它是否有意义。 为什么?
只要处理了INSERT,聚集索引就会导致页面数据的重新排序,因为新行未附加到索引的末尾但插入到中间
我是对的?选择Integer
类型列的聚簇索引的任何其他原因?或者我的方向错了?
当我必须使用%...%
搜索字符串时,如下面的查询
Select Column1 From Table1 Where Column1 Like '%SomeVal%'
我有以下问题。
%....%
是否有意义?Column1
添加聚集索引,然后转到%....%
%...%
?答案 0 :(得分:4)
是的,SQL Server(以及一般的计算机)查看数字列表比通过文本列表更快。这意味着搜索WHERE ID = 3的记录通常比WHERE FirstName ='BOB'更快。如果您的系统适合跟踪其中一个,那就非常有用,例如当用户点击您可以选择存储ProductID或ProductName的产品时,ProductID将更快地拉动。但是,如果那个WHERE子句中唯一的列是文本字段,就像你总是按照标题查找电影一样,那么你可能最好将聚簇索引放在该列上。作为一般规则,我有一个带有聚簇索引的整数ID字段,然后在另一个字段上放置一个非聚集索引,但这实际上取决于具体情况。
FTS是基于字的,而通配符(%)是基于模式的,因此如果您需要搜索“Patricia”的文本字段,FTS可能是您的最佳选择,但如果您需要搜索“Pat%”要寻找“Patrick”或“Pattie”或“Patricia”,FTS将无法正常运作。我希望这是有道理的。搜索StackOverflow或google获取“fts vs like”,您将就此事进行一些讨论。