Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MS-SQL 2012-索引位字段_Sql Server - Fatal编程技术网

Sql server MS-SQL 2012-索引位字段

Sql server MS-SQL 2012-索引位字段,sql-server,Sql Server,在MS-SQL 2012上,如果要在查询中始终使用已删除的位字段(即,从oo中选择xx,其中已删除=0),则索引已删除的位字段是否有意义 或者一个字段是位的事实是否已经为性能问题提供了某种自动索引???当您索引一个由1,0或某些有限值组成的位字段时,实际上是在减少与该值匹配的行数。对于较少的记录,这可能很好,但对于大量数据,它可能有助于提高性能 可以将位列作为复合索引的一部分 在0和1的数量之间存在很大差异的情况下,位字段索引可能非常有用,并且您正在搜索两者中的较小者。在必须的条件下,对位字段进

在MS-SQL 2012上,如果要在查询中始终使用已删除的位字段(即,从oo中选择xx,其中已删除=0),则索引已删除的位字段是否有意义


或者一个字段是位的事实是否已经为性能问题提供了某种自动索引???

当您索引一个由1,0或某些有限值组成的位字段时,实际上是在减少与该值匹配的行数。对于较少的记录,这可能很好,但对于大量数据,它可能有助于提高性能

可以将位列作为复合索引的一部分


在0和1的数量之间存在很大差异的情况下,位字段索引可能非常有用,并且您正在搜索两者中的较小者。

在必须的条件下,对位字段进行索引将非常无用,因为选择性太低。在大表上进行索引扫描不会比表扫描更好。如果还有其他条件可以用来创建过滤索引,你可以考虑。


如果该字段以这样的方式改变逻辑的性质,您将总是需要在谓词中考虑它,则可以考虑在报告时将数据拆分到其他表中。p> 是否为位字段编制索引取决于几个因素,这些因素已在对该问题的回答中得到充分解释

正如其他人所提到的,选择性是关键。但是,如果你总是在一个值或另一个值上搜索,并且这个值是高度选择性的,考虑使用过滤索引。

为什么不放在你的聚集索引的前面?如果删除是增量的,你必须把填充因子调低,但它们很可能是每天的,对吗?你的删除记录比未删除记录多得多?而且,正如您所说,您只查询未删除的记录。所以,是的。不要只是索引该列。集中注意力

当位列位于索引中的第一个位置时,它可以用作复合索引的一部分。但是,如果您只想将其用于selectitn一个值select。。。。其中deleted=1,另一个_键=?;但从不删除=0,然后使用筛选器在另一个_键上创建索引:

create index i_another on t(another_key) where deleted=1
如果位列应该是复合索引中的最后一个,那么索引中的出现是无用的。但是,为了获得更好的性能,您可以将其包括在内:

create index i_another on t(another_key) include(deleted)

然后,DB引擎将获得该值以及读取索引,而不需要从基表页面获取该值。

可能重复有趣的概念…那么,对于用户表上的已删除字段,您有何建议?主用户表仍将保留该字段,但您还将维护一个ActiveUsers表。这通常只是按键对Users表的引用。请记住,对于小表,这将是荒谬的,因为知道这是用户,我只能假设这是不必要的。在我的情况下,在用户表上,我有删除的位字段,您会建议什么?您可能永远不会只要求所有已删除/未删除的记录,您希望请求USER=X和Deleted=0,因此它作为一个独立索引是无用的,但作为一个复合索引是非常重要的。