Mos*_*aou 17 sql sql-server indexing
知道索引列会带来更好的性能,是否值得为数据库的所有表中的所有列编制索引?这种方法有哪些优点/缺点?
如果它值得,有没有办法在SQL Server中自动创建索引?我的应用程序动态添加表和列(取决于用户配置),我想让它们自动编入索引.
Gor*_*off 19
由于上述原因,很难想象真实场景中每列的索引都是有用的.场景类型需要一堆不同的查询,所有查询都只访问表的一列.每个查询都可以访问不同的列.
其他答案没有解决查询选择方面的问题.显然,维护索引是一个问题,但是如果要创建表一次然后多次读取,则更新/插入/删除的开销不是考虑因素.
索引包含原始数据以及数据所在的记录/页面的点.索引的结构可以快速执行以下操作:查找单个值,按顺序检索值,计算不同值的数量,以及查找最小值和最大值.
索引不仅占用磁盘空间.更重要的是,它占据了记忆.而且,内存争用通常是决定查询性能的因素.通常,在每列上构建索引将占用比原始数据更多的空间.(一个例外是相对较宽且值相对较少的列.)
此外,为了满足许多查询,您可能需要一个或多个索引以及原始数据.您的页面缓存变得充满了数据,这可能会增加缓存未命中数,从而导致更多的开销.
我想知道你的问题是否真的表明你没有充分建模你的数据结构.在某些情况下,您希望用户构建临时永久表.更典型的是,他们的数据将以预定义的格式存储,您可以根据访问要求进行优化.
Mar*_*arc 10
不,因为您必须考虑到每次添加或更新记录时,都必须重新计算索引,并且在所有列上使用索引会花费大量时间并导致性能下降.
因此数据库就像只有选择查询的数据仓库是个好主意,但在普通数据库上这是一个坏主意.
此外,这不是因为您在where子句中使用了一个列,您必须在其上添加索引.尝试找到一个列,其中记录几乎都是唯一的,如主键,并且您不经常编辑.一个坏主意是索引一个人的性别,因为只有两个可能的值,索引的结果只会拆分数据,然后它将搜索几乎所有记录.
不,你不应该索引你的所有列,这有几个原因:
您最好使用解释计划和数据访问并在必要时添加索引(并且仅在必要时,恕我直言),而不是预先创建它们。