之前接手一个数据统计处理的小程序,本来逻辑上并没什么,只是数据量略大,某些表的数据达到了千万级别..因为是统计,所以免不了各种连接各种查询,结果这个小程序写完后运行一次要1个小时..这的确有点出乎意料,所以着手优化一下..

1.添加索引

平时不注意或是数据量比较小的时候可能会忽略这个,加或是不加基本没差别,但是当数据量很大的时候差别就非常明显,没有索引的情况下,在1万条以内和10万条以上的数据中查询所用的时间差别已经能分辨出了.这里有2点需要特别注意:

1)默认情况下我们创建表,数据库会自动给我们添加一个默认索引,但是当采用create table 表名 as select 语句创建表时,数据库是不会自动创建索引的,此时我们需要手动添加索引.

2)哪些字段需要添加索引?那些在我们查询语句中起到桥梁(连接)作用的字段需要添加索引.因为只有在查询条件中包含有索引字段才能享用索引带来的速度提升.

可以说索引是提高查询速度最明显最简单的方法,它可以令一个数分钟的查询在毫秒内完成,效率提升不是一点半点..

2.缩小查询集合

既然是查询,那一定有要查询的集合,也就是 from 后面的集合.如果能缩小这个集合,那么查询遍历一遍的时间也会缩减不少,整体的查询时间自然会减少.主要有几个手段:

1)创建临时查询表.如果一个表的数据量很大,而我们只在其中满足某些特定条件的数据集合中查询,那么我们完全可以首先从这个表中查询出所有满足特定条件的数据集合并创建成一个表,典型应用就是create table xx as select XX where xx ,这样我们就得到一个比原始表小很多的临时表,之后的所有查询工作都从这张新表中进行即可..

2)优化查询语句顺序.where后的条件语句是从右向左执行的,所以我们可以把能排除掉更多数据的条件放到最右面,这样执行后余下的数据集合会更小,接下来的条件查询也就更快.同一思想,当我们采用子查询的时候,让某些子查询排除掉更多的数据也会让整体效率提高.

3)去重,去重本来是一个比较耗时的操作,但是如果某个集合是反复被使用的,那么对这个集合进行去重处理也会带来效率的提升.

经过优化后那个小程序在5分钟内就执行完毕..可见sql语句的优化带来的提升还是很可观的..当然由于我这个小程序一开始就处理的不是太好,所以优化后提升很多,但是这也说明,如果注意sql语句的优化,在程序的处理时候就多加注意的话,一定程度上能避免不少性能问题..

2014年小结之sql语句优化的更多相关文章

  1. sql语句优化原理

    前言 网上有很多关于sql语句优化的文章,我这里想说下为什么这样...写sql语句,能够提高查询的效率. 1 sql语句优化原理 要想写出好的sql,就要学会用数据库的方式来思考如何执行sql,那么什 ...

  2. 优化数据库的方法及SQL语句优化的原则

    优化数据库的方法: 1.关键字段建立索引. 2.使用存储过程,它使SQL变得更加灵活和高效. 3.备份数据库和清除垃圾数据. 4.SQL语句语法的优化.(可以用Sybase的SQL Expert,可惜 ...

  3. oracle之sql语句优化

    oracle之sql语句优化 sql语句的优化 1.在where子句中使用 is null 或 is not null 时,oracle优化器就不能使用索引了. 2.对于有连接的列,即使最有一个是静态 ...

  4. 数据库 基于索引的SQL语句优化之降龙十八掌(转)

    一篇挺不错的关于SQL语句优化的文章,因不知原始出处,故未作引用说明! 1 前言      客服业务受到SQL语句的影响非常大,在规模比较大的局点,往往因为一个小的SQL语句不够优化,导致数据库性能急 ...

  5. 数据库的优化(表优化和sql语句优化)

    在这里主要是分为表设计优化和sql语句优化两方面来实现. 首先的是表设计优化: 1.数据行的长度不要超过8020字节.如果是超过这个长度的话这条数据会占用两行,减低查询的效率. 2.能用数字类型就不要 ...

  6. MySQL常用SQL语句优化

    推荐阅读这篇博文,索引说的非常详细到位:http://blog.linezing.com/?p=798#nav-3-2 在数据库日常维护中,最常做的事情就是SQL语句优化,因为这个才是影响性能的最主要 ...

  7. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  8. sql语句优化总结

    sql语句优化总结 数据库优化的几个原则: 1.尽量避免在列上做运算,这样会导致索引失败: 2.使用join是应该用小结果集驱动大结果集,同时把复杂的join查询拆分成多个query.不然join的越 ...

  9. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

随机推荐

  1. 三种对话框的示例(alert,confirm,prompt)

    示例代码 <h2>JavaScriptDialog</h2> <hr/> <buttononclick="btn_alert()"> ...

  2. sql联合查询去除重复计算总和

    1.首先来个联合查询 SELECT 字段1, 字段2, 字段3, 字段4 FROM 表1 INNER JOIN 表2 ON 表1.字段x = 表2.字段x x:代表随意的一个,只要在联合查询的两张表都 ...

  3. ubuntu 14.04 64位安装bigbluebutton

    BigBlueButton 是一个使用 ActionScript 开发的在线视频会议系统或者是远程教育系统,主要功能包括在线PPT演示.视频交流和语音交流,还可以进行文字交流.举手发言等功能,特别适合 ...

  4. flask-uploads扩展的使用笔记

    涉及的flask扩展 flask-uploads flask的一个文件上传扩展, 提供了UploadSet这个概念 flask-wtf(中文) 很强大的表单的扩展 flask-bootstrap bo ...

  5. python pip 升级每个包

    pip本身不自带升级所有包的功能, 但可以通过下面的脚本实现. import pip from subprocess import call for dist in pip.get_installed ...

  6. html button自动提交表单问题

    在ie中,button默认的type是button,而其他浏览器和W3C标准中button默认的属性都是submit,所以在chrome中,需要使用<button type="butt ...

  7. Android5.0新特性——图片和颜色(drawable)

    图片和颜色 tint属性 tint属性一个颜色值,可以对图片做颜色渲染,我们可以给view的背景设置tint色值,给ImageView的图片设置tint色值,也可以给任意Drawable或者NineP ...

  8. JSON数据解析(转)

    上篇随笔详细介绍了三种解析服务器端传过来的xml数据格式,而对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式,那么本篇随笔将讲解一下json这个知识点,包括如何通过 ...

  9. playframework中多附件上传注意事项

    playframework中多附件上传注意事项 2013年09月24日 play 暂无评论 //play版本问题 经确认,1.0.3.2版本下控制器中方法参数  List<File> fi ...

  10. margin和padding对行内元素的影响

    这个是在面试的时候,面试官问我的一个小问题 自己没有考虑过inline元素设置margin和padding的问题 学习的过程记录下来 1)inline元素的高度是由元素的内容决定的(字体的大小和行高) ...