繁体   English   中英

告诉我不需要SQL Server索引的情况

[英]Tell me a situation in which SQL Server indexing is not required

您能告诉我不需要在SQL Server表上建立索引的情况吗?

我认为这是一张表,您需要在其中快速并可能以高频率转储数据(例如在数据采集应用程序中,从传感器中转储原始数据),以便稍后进行处理。 这是因为由于重新安排索引的开销,索引趋于稍微降低数据插入的速度。

从技术上讲,它从来不是“必需的”,但它总是一个好主意。 如果没有聚集索引(非聚集索引需要聚集索引才能工作),那么每次访问该表中的数据时,都必须进行表扫描以检索信息。 如果表中的行数非常少,则索引从技术上讲几乎没有好处。

想不出一个真正的好例子。 也许如果您有一个由于某种原因仅持有一个值的表。 无需索引该表。

如果表低于一定的行数,则执行表扫描比查找索引要快。

我不确定一个比另一个更快的确切数字。

对于诸如日志表之类的东西而言,可能不需要的地方是您在其中保存一些事件,但永远不会引用该表中的主键。 如果您曾经访问过该表,则可能是针对文本搜索的,通常无论如何都需要对表进行扫描。 尽管很容易辩称,没有日期/时间列的日志表什么也没有,应该对其进行索引。

我以前的DBA告诉我,根据我们的经验,行数少于50K的窄表不需要为从该一张表中检索数据而建立索引,因为索引查找的开销抵消了表扫描的开销。

我能想到的地方,可能不需要索引的几个例子,但我不能真的认为任何例子,你会不会想索引你的表呢。

至少您应该索引主键 -没有理由不这样做。

对于非登台表,当该表具有零(或可能只有一)行并且没有外键时。 但是,如何防止有人再次添加相同的值?

否则,将临时表清空并在一个调用中进行批量处理可能会有好处

简而言之,您几乎不会在任何地方都不使用索引的情况下...

我从事过ETL解决方案(Integration Serices编写为SQL Server 2005)的工作,由于插入(而且只有插入)要花费数小时(尽管后来将数据导入到Analysis中),因此我不得不放弃很多索引。在定义了其他关系的服务多维数据集中,您可能会认为索引并没有被放弃)。 对于某些表,折衷方案是在写入过程之前删除索引,然后在之后重新创建它们。 娱乐花费了很长时间,但仍然比插入同时建立索引的势头要快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM