回答

收藏

索引所有列

技术问答 技术问答 208 人阅读 | 0 人回复 | 2023-09-14

知道索引列会带来更好的性能,是否值得对数据库所有表中的所有列建立索引?这种方法的优点/缺点是什么?
/ f' F+ `0 q2 i" f  S, T; G" ]# [3 y如果值得的话,有没有一种方法可以在SQL Server中自动创建索引?我的应用程序动态地添加了表和列(取决于用户配置),我希望它们被自动索引。
1 p" q$ W# [7 w' U- G2 I4 \               
; Q! [, A) V  s+ ^- x) l! K! E解决方案:. v' W. k5 |0 Q% A# F5 I
                & t4 F6 b' }' j  L) @+ ~

: p1 }  A- v' s# g3 l; o
. ^, }/ Y, e9 B# e8 N* \& y                由于上面提到的原因,很难想象在现实世界中对每列进行索引都是有用的。场景类型将需要一堆不同的查询,所有查询都只访问表的一列。每个查询可能正在访问不同的列。
  [8 [+ r+ F  ?, f, F% m) B其他答案不能解决查询 选择 期间的问题。显然,维护索引是一个问题,但是如果您一次创建一个表然后多次读取,则无需考虑更新/插入/删除的开销。
+ F8 C( y  `  L0 b索引包含原始数据以及指向数据所在的记录/页面的点。索引的结构使您可以快速执行以下操作:查找单个值,按顺序检索值,计算不同值的数量以及查找最小值和最大值。
4 L, P: O% X6 V8 A- C1 `' U索引不仅会占用磁盘空间。更重要的是,它占用内存。而且,内存争用通常是决定查询性能的因素。通常,在每列上建立索引将比原始数据占用更多的空间。(一个例外是相对较宽且值相对较少的列。)
: e# s0 J. T) `  ?1 `4 m' g另外,要满足许多查询,您可能需要一个或多个索引 以及 原始数据。您的页面缓存中充斥着大量数据,这可能会增加缓存未命中的数量,从而导致更多的开销。
. C$ Q! r/ H* Y我想知道您的问题是否真的表明您没有对数据结构进行适当的建模。在少数情况下,您希望用户构建临时永久表。通常,它们的数据将以预定义的格式存储,您可以针对访问需求进行优化。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则