最近在总结SQL Server2005下性能调优方法,一个通用的调优方法。通过找到系统的瓶颈,然后解决瓶颈,提高性能。例如:当我们找到系统的瓶颈在于磁盘I/O上,在不提高硬件配置的前提下,我们应该如果提高性能?通过各种各样的性能分析工具 :Profiler、SQLDiag、Perfmon等等。我们找到了一些影响性能的关键SQL,现在我们暂不考虑程序问题。对于这些SQL我们应该如何改进呢?说起SQL,不得不提索引,这也就是我们今天要讨论的主题。

首先,什么是索引?从BookOnline上search了一下:

索引   索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B 树)中,使 SQL Server 可以快速有效地查找与键值关联的行。   索引有什么类型: 索引类型 聚集

  • 聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。
  • 只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。

非聚集

  • 非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。
  • 从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。
  • 在 SQL Server 2005 中,可以向非聚集索引的叶级别添加非键列以跳过现有的索引键限制(900 字节和 16 键列),并执行完整范围内的索引查询。

在了解了上述概念后,如何正确使用索引对于程序的性能有着至关重要的作用。设计良好的索引可以减少磁盘 I/O 操作,并且消耗的系统资源也较少,从而可以提高查询性能。对于包含 SELECT、UPDATE 或 DELETE 语句的各种查询,索引会很有用。

在我们的coding中,得到相同的查询结果SQL的写法可以有多种,最重要的考虑因素之一是WHERE条件,WHERE条件限制了查询要返回的记录数目,查询优化程序会尝试判断已有的索引,分析对查找符合的记录是否有帮助。

查询优化程序要查看WHERE中的条件,以决定这些条件在限制SQLServer访问时是否有用。所以,有效的设置查询参数,决定了是否可以充分的利用索引。

查询参数可以包含一下操作:=、<、>、>=、<=、BETWEEN、部分like。其中,like当这样使用时会用到索引:like '*%',但like'%*'就用不到索引。因为索引的摆放是依据字段值升序或降序排列,like'%*'这种用法,不能利用有序的数据结构,利用二分法查找数据。

不适当的查询参数有:NOT 、!= 、<>、 !>、 !< 、NOT EXISTS、 NOT IN 、NOT LIKE等,还有一些不当的用法,例如:对数据进行计算,负向查询、等号左边使用函数、使用OR。上述语法都不用不上索引,降低程序的效率。

当我们了解了索引的用法后,在我们编写sql时考虑上述用法,充分利用索引,以高程序的性能。还有,在我们coding过程中,写好sql后,最好使用SQL Server自带的查询计划,来分析SQL执行成本、索引的使用情况,尽可能的使用索引来提高效率。

先说这么多,欢迎高手们提出更好的建议,我们一起进步。

转载于:https://www.cnblogs.com/tianqing/archive/2008/08/07/1262603.html

SQL Server2005探索之---正确使用索引相关推荐

  1. 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询

    查看表相关命令 - 查看表结构 desc 表名- 查看生成表的SQL show create table 表名- 查看索引 show index from 表名 使用索引和不使用索引 由于索引是专门用 ...

  2. 解决SQL server2005数据库死锁的经验心得

    前段时间提到的"sql server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法,后来我们 ...

  3. excel连接mysql的服务器,SQL Server2005连接Excel、Access,链接服务器的设置

    通过设置链接服务器可以使SQLSVR访问其它类型的数据库,例如应用程序访问SQLSVR,查询Oracle数据库中的数据或者Access中的数据.不同的数据库类型需要不同的访问接口,如果没有该访问接口, ...

  4. mysql 数据索引使用_mysql数据库正确建立索引及使用

    普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了.其中优化mysql的一个重要 ...

  5. Sql Server2005 Transact-SQL 新兵器学习总结之-数据类型

    sql server2005新增加了2大数据类型: 1.大值数据类型 2.xml 1.大值数据类型 Microsoft SQL Server 2005 中引入了 max 说明符.此说明符增强了 var ...

  6. 记一次SQL Server2005导入Oracle10G的折腾过程【供多种数据库导入导出数据的C#程序源码参考】...

    曾经很早的时候用 SQL Server2000 时就见过我们老大,用 SQL Server2000 的导入导出功能,把数据都导入到了 Oracle9 里去,所以我也对导入导出数据有充分的信心,绝对能做 ...

  7. SQL Server 查询性能优化——覆盖索引(二)

    在SQL Server 查询性能优化--覆盖索引(一)  中讲了覆盖索引的一些理论. 本文将具体讲一下使用不同索引对查询性能的影响. 下面通过实例,来查看不同的索引结构,如聚集索引.非聚集索引.组合索 ...

  8. sql server 2008学习4 设计索引的建议

    索引设计的建议: 一.检查where子句和连接条件列 当一个查询提交到sql server时,查询优化器尝试为查询中引用的所有表查找最佳的数据访问机制, 一下是它所进行的方式. 1.优化器识别Wher ...

  9. mysql 建索引_mysql数据库正确建立索引及使用

    普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了.其中优化mysql的一个重要 ...

最新文章

  1. 我,某大学副教授+副处级,工资7300/月,老婆天天骂我窝囊废……
  2. AI战略投资全景图:11个行业200多家巨头最爱什么样的AI创业公司?
  3. PHP中ini_set和ini_get函数用法简介
  4. Spring boot的第一个demo
  5. go语言json字符串解析为结构体数组,结构体指针的数组
  6. Linux 中yum的配置
  7. Oracle12081,【Oracle介质】Oracle 12C Linux x86-64 最新OPatch patch 6880880 12.2.0.1.7
  8. html按照字数分页,纯javascript实现分页(两种方法)
  9. 四年级学生计算机学情分析报告,四年级学情分析
  10. Condition梳理和总结
  11. Qt之SQLite数据库可视化工具
  12. 游戏测试----------------第4章
  13. MATLAB计算自相关函数和互相关函数
  14. 牛客寒假训练营1 K 冒险公社(线性dp)
  15. 易到暂停办理线下提现 称贾跃亭隐瞒巨额债务成影响提现关键因素
  16. 修改北京定点医院amp;查询医保信息
  17. 让 Linux 更安全
  18. 【无代码爬虫】web scraper 之 安装
  19. 猴子摘香蕉问题-人工智能模拟
  20. FreeBSD--如何最有效率的安装软件

热门文章

  1. 小米8劲敌来了!同是骁龙845,它降价幅度更大
  2. 情怀再次输给现实!中国式星巴克,如今亏到连租金都交不起
  3. 程序员高工资是靠汗水和勤奋换来的,想拿高工资入门学习很重要
  4. 给我一个小碗,还你一个奇迹——结构工程师教你吃垮必胜客(有图,附论文)【ZT】...
  5. R语言chorolayer_R成精系列-R 错误汇总
  6. python mypy类型检查_Python中类型检查的详细介绍
  7. JSP页面之前传输 中文乱码
  8. MySQL8 Zip的下载和安装
  9. 【Elasticsearch】es 7.12 Root mapping definition has unsupported parameters: _all
  10. 【kafka】Consumer is not subscribed to any topics