关闭

使用索引统计信息优化查询语句,提高查询效率

发表于:2013-4-08 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Beirut的专栏    来源:51Testing软件测试网采编

  如果你查询优化统计还没有太多的认识和了解,那么建议你从头开始看,如果你已经很了解,那么可以直接跳到下面去看本文的重点了。

  什么是查询优化统计信息?

  查询优化的统计信息是一些对象,这些对象包含与值在表或索引视图的一列或多列中的分布有关的统计信息。查询优化器使用这些统计信息来估计查询结果中的基数或行数。通过这些基数估计,查询优化器可以创建高质量的查询计划。例如,查询优化器可以使用基数估计选择索引查找运算符而不是耗费更多资源的索引扫描运算符,从而提高查询性能。

  每个统计信息对象都在包含一个或多个表列的列表上创建,并且包括显示值在第一列中的分布的直方图。在多列上的统计信息对象也存储与各列中的值的相关性有关的统计信息。这些相关性统计信息(或密度)根据列值的不同行的数目派生。

  使用数据库范围的统计信息选项

  自动创建统计信息选项 AUTO_CREATE_STATISTICS 和自动更新统计信息选项 AUTO_UPDATE_STATISTICS 默认为 ON,我们建议使用这一默认值来用于大多数用户数据库。您可以使用以下 SELECT 语句来为所有用户数据库查看这些选项的当前值:

SELECT name AS "Name",
  is_auto_create_stats_on AS "Auto Create Stats",
  is_auto_update_stats_on AS "Auto Update Stats",
  is_read_only AS "Read Only"
FROM sys.databases
WHERE database_ID > 4;

  查看统计统计信息

  DBCC SHOW_STATISTICS 显示表或索引视图的当前查询优化统计信息。语法结构参考DBCC SHOW_STATISTICS,这里不做过多阐述。

  确定何时创建统计信息

  查询优化器已通过以下方式创建统计信息:

  1、在创建索引时,查询优化器为表或视图上的索引创建统计信息。这些统计信息将创建在索引的键列上。如果索引是一个筛选索引,则查询优化器将在为该筛选索引指定的行的同一子集上创建筛选统计信息。

  2、在 AUTO_CREATE_STATISTICS 为 ON 时,查询优化器为查询谓词中的单列创建统计信息。

  对于大多数查询,用于创建统计信息的这两个方法就可以确保高质量的查询计划;但在很少的情况下,可以通过使用 CREATE STATISTICS 语句创建附加的统计信息,改进查询计划。这些附加的统计信息可以捕获查询优化器在为索引或单列创建统计信息时并未考虑的统计关联。您的应用程序可能在表数据中具有附加的统计关联,如果在统计信息对象中计入这些关联,可能会令查询优化器改进查询计划。例如,针对数据行子集的筛选统计信息或针对查询谓词列的多列统计信息可改进查询计划。

  在使用 CREATE STATISTICS 语句创建统计信息时,我们建议保持 AUTO_CREATE_STATISTICS 选项为 ON,以便查询优化器继续为查询谓词列定期创建单列统计信息。

  在以下任何情况适用时,考虑使用 CREATE STATISTICS 语句创建统计信息:

  ① 数据库引擎优化顾问建议创建统计信息。

  ② 查询谓词包含尚不位于相同索引中的多个相关列。

  ③ 查询从数据的子集中选择数据。

  ④ 查询缺少统计信息。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号