设为首页 收藏本站
查看: 870|回复: 0

[经验分享] 仙人指路--SQL查询优化

[复制链接]

尚未签到

发表于 2018-10-18 10:58:42 | 显示全部楼层 |阅读模式
  作为一名数据库管理维护人员。无法避免的问题就是,当数据库中的数据累计到一定规模时,必然会出现数据库性能降低,数据查询缓慢,甚至无法正常使用的情况。这就像是迷失了方向的旅客无法找到归途。那么如何能够快速准确的找到正确的道路呢?是一条路一条路的试,还是问问过路的动物呢?答案当然是请教于神仙了。这就是仙人指路了。呵呵,开开玩笑。
  那么如何才能在数据库中请教于神仙呢?我们所要做的第一步就是请神!换句话说就是创建索引。索引就是对数据表的数据建立相当于图书目录的东西。在需要查找数据时首先查找索引目录。在目录中找到相应的位置后,直接到数据表中提取。这样做的优势显然大于去每条数据逐个查找。既然索引具有如此优势,那么如何建立呢?建立又是否复杂呢?答案是让你轻松的,结果是让你愉快的。
  那么现在演示如何创建索引,以及查看使用索引和不使用索引的速度区别。

  
  要为表创建索引,首先要先了解一下表的结构。可以用SQL语句来查看一下当前的记录条数。
  在这里查询的时候,建议开启上面红框内的“包括实际的执行计划”选项,打开后会出现下面红框内的“执行计划”栏。
  

  选择“执行计划”栏。鼠标移动到“聚集索引扫描”上停顿一秒,会出现详细信息,这时记录“估计运算符开销”的数值。这个数值就是在表中查找数据所用的时间。

  
  现在展开要创建索引的表,右键点击“索引”-选择“新建索引”
  

  输入索引名称,选择类型为“非聚集”。(有非聚集当然也有聚集。聚集就是有序排列,如数字1.2.3.4······,非聚集就是无序排列。大部分数据都是非聚集的。)
  点击“添加”添加索引键列。(就是要在哪一列中查找内容就选那一列。)
  

  之后在选择页中选择“包含性列”,点击“添加”,添加包含列。(可选项)
  

  点击“确定”新的索引就创建好了。下面来试试新索引的速度。
  
  
  

  现在先不使用索引进行查找。(右键单击索引名称,选择“属性”-“选项”)
  

运行select * from Person.Address where city='albany'

  命令后,“执行计划”栏中出现了三个项目。要查看此次命令的查询时间,我们就需要将这三项的“估计运算符开销”相加。
  

  实验原因,现在仅用三项中最大的一项来验证。最大一项中“估计运算开销”值为0.1801413
  

  现在打开索引
  

  执行与刚才相同的命令,再查看“估计运算符开销”值。现在仅仅是0.0032837比之前的0.1801413提高了54倍有余。这仙人指路的称号是当之无愧了。
  
  注:大仙虽然强悍,但也不是想用就用的。索引亦然。在下面六种情况下,使用索引要注意。
  1 查找条件中,不要将字段进行运算。
  2 LIKE模糊差选字段的通配符是第一个字符,查询不会使用索引。
  3 查询条件使用not或者!=操作符时,查询不会使用索引。
  4 使用组合索引,查询条件必须包含组合索引里的第一个索引字段。
  5 如果查询结果字段与查询条件字段总是成对出现,建议使用所引表查询。
  6 查询结果数据大于全部数据20%以上,数据库不会使用索引。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-623117-1-1.html 上篇帖子: Lync Server 2010 安装要点 下篇帖子: 在C#中用SQLDMO创建SQL数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表