当前位置:  开发笔记 > 数据库 > 正文

SQL Server统计

如何解决《SQLServer统计》经验,为你挑选了1个好方法。

因此,对于这个项目,我们有一堆定期执行的查询(每分钟左右.我使用"数据库引擎中的分析查询"来检查它们.

它们非常简单:select*from tablex where processed ='0'

处理时有一个索引,每个查询应在具有1MM记录的表上返回<1000行.

分析器建议在此创建一些统计数据......所以我的问题是:这些统计数据是什么?他们真的有助于表现吗?对于像上面这样的桌子,它们的成本有多高?

请记住,我绝不会称自己为SQL Server有经验的用户......这是第一次使用此分析器.



1> Josef..:

统计信息是SQL Server用于确定如何获取数据的可行性的统计信息.

例如,假设您有一个只在主键上有聚簇索引的表.执行时SELECT * FROM tablename WHERE col1=value,SQL Server只有一个选项,用于扫描表中的每一行以查找匹配的行.

现在我们在col1上添加一个索引,所以你假设SQL Server将使用索引来查找匹配的行,但这并不总是正确的.假设该表有200,000行,并且col1只有2个值:1和0.当SQL Server使用索引查找数据时,索引包含指向聚簇索引位置的指针.鉴于索引列中只有两个值,SQL Server认为仅扫描表更有意义,因为使用索引会更有效.

现在我们将向表中添加另外800,000行数据,但这次值的col1变化很大.现在它是一个有用的索引,因为SQL Server可以通过使用索引来限制从表中提取的内容.SQL Server会使用索引吗?

这取决于.它取决于统计数据.在某个时间点,如果AUTO UPDATE STATISTICS设置为on,服务器将更新索引的统计信息并知道它是一个非常好且有效的索引.然而,在那之前,它将忽略索引无关紧要.

这是统计数据的一种用途.但还有另一种用途,与指数无关.SQL Server保留有关表中所有列的基本统计信息.如果有足够的不同数据使其值得,SQL Server实际上会在列上创建一个临时索引并使用它来过滤.虽然这比使用现有索引花费更多时间,但它比完整表扫描花费的时间更少.

有时,您会获得建议,以创建对此有用的列的特定统计信息.这些不是索引,但是会跟踪列中数据的统计抽样,因此SQL Server可以确定创建临时索引以返回数据是否有意义.

HTH

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有