加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 什么时辰建设STATISTICS而不是建设索引更好?

发布时间:2021-05-23 01:26:04 所属栏目:编程 来源:网络整理
导读:我已经找到了大量有关STATISTICS的信息:怎样维护它们,怎样手动或自动从查询或索引建设它们等等.可是,我无法找到有关何时建设它们的任何指导或“最佳实践”信息:哪些环境从手动建设的STATISTICS工具中获益比从索引中获益更多.我已经看得手动建设过滤统计信息

我已经找到了大量有关STATISTICS的信息:怎样维护它们,怎样手动或自动从查询或索引建设它们等等.可是,我无法找到有关何时建设它们的任何指导或“最佳实践”信息:哪些环境从手动建设的STATISTICS工具中获益比从索引中获益更多.我已经看得手动建设过滤统计信息,辅佐查询分区表(由于为索引建设的统计信息包围了整个表,而不是每个分区 – brillaint!),但必定必需有其他方案可以从统计工具中受益不必要索引的细节,也不值得维护索引或增进阻塞/死锁的机遇.

@JonathanFite在评述中提到了索引和统计之间的区别:

Indexes will help SQL find the data faster by creating lookups that are sorted differently than the table itself. Statistics help SQL determine how much memory/effort is going to be required to satisfy the query.

这是很好的信息,首要是由于它辅佐我澄清了我的题目:

怎样知道这一点(或与STATISTICS的举动和性子相干的任何其他技能信息)有助于确定何时选择CREATE STATISTICS而不是CREATE INDEX,出格是在建设索引时将建设相干的STATISTICS工具?只有STATISTICS信息而没有索引会更好地处事于什么环境?

假如也许的话,假若有一个STATISTICS工具比INDEX更得当的场景的事变示例,那将是超等有效的.

因为我是一名视觉进修者/头脑家,我以为将STATISTICS和INDEX之间的差别并排看作也许有助于确定何时STATISTICS是更好的选择.

Thingy           PROs                             CONs
-------          ----------                       -------------------
INDEX            * Can help sorts.                * Takes up space.
                 * Contains data (can             * Needs to be maintained (extra I/O).
                   "cover" a query).              * More chances for blocking / dead-locks.

STATISTICS       * Takes up very little space.    * Cannot help sorts.
                 * Lighter maintenance / won't    * Cannot "cover" queries.
                   slow down DML operations.
                 * Does not increase chances
                   of blocking / dead-locks.

以下是我在探求这个时发明的一些资源,纵然是统一个题目,也没有答复:

SQL Server Index vs Statistic

SQL Server Statistics Questions We Were Too Shy to Ask

Statistics. Are multicolumn histograms possible?

**为了清晰起见,我没有这方面的谜底,我现实上但愿获得一些人的反馈意见,以提供好像稀疏的错误信息在这里的互联网.

办理要领

你的题目环绕着 – 什么时辰建设统计与建设索引(建设统计数据)是一件功德.

从我的sql server内部注释(SQLSkills类 – IE1和IE2)和SQL Server internals book,下面是我有限的领略:

SQL Server统计信息只是包括有关索引键值和通例列值的重要信息的体系工具.

SQL Server行使基于本钱的模子来尽快选择“足够好”的执行打算.忠诚度预计(预计要在每个步调上处理赏罚的行数
查询执行是查询优化中最重要的身分,它会影响毗连计策,内存授予要求,事变线程选择
以及会见数据时的索引选择.

SQL Server在预计大数目时不会行使非聚簇索引.将必要KEY或RID轮回操纵,因此它维护索引(和列)的统计信息
将有助于这种预计.

统计数据有两个重要的事项:

>直方图仅存储最左侧统计(索引)列的数据漫衍信息.它还存储有要害值的多列密度的信息.根基上,
直方图仅存储最左侧统计列的数据漫衍.
>无论表巨细怎样,SQL Server将在直方图中保存最多200个步调.每个直方图步调所包围的隔断跟着表的增添而增进,这导致大表的“不太精确”的统计数据.

请记着,指数选择性是一个与密度成反比的指标,即色谱柱具有的独一值越多,其选择性越高.

当特定查询不常常运行时,您可以选择建设列级统计信息而不是索引.列级统计信息有辅佐
查询优化器找到更好的执行打算,纵然这些执行打算因为索引而不是最抱负的
扫描涉及.同时,统计数据不会在数据修改操纵时代增进特殊开销
辅佐停止索引维护.此要领仅合用于很少执行的查询.

参考:

> Column Statistics Give the Optimizer an Edge by Kalen Delaney
> Statistics,Damned Lies,and Statistics – What is Statman?由康纳坎宁安

留意:像Paul White或Aaron Bertrand这样的人可觉得your good question提供更多颜色.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读