三年程序员经验分享之sql优化
从事软件开发的人员或者多或者少都会碰到过数据库优化的问题,尽管针对不同的数据库,专业的dba会给出不同的方案,分库、分表之类的。但对于普通的开发人员来说,掌握少量商定成俗的规则或者者说是更高效的sql书写形式则是非常必要的,本文总结出来以下几点都是工作中切切实实的感受,希望大家可以共同参考。
1、数据库表设计层面尽量满足三范式的要求。当然此处说的是大多数的情况,并不是说肯定不能有冗余之类的,只是少量通用的规则;
2、表设计的时候外键的束缚能不加就不加,可将强相关逻辑放在程序中控制,删除时做好级联删除即好。(该规则尤其适用于那些按月或者者不同日期数据量翻倍的基础表)
3、sql尽量保持全大写的书写形式。笔者第一份工作接触的就是oracle数据库,oracle在执行时会默认将sql转换为大写,尽管我们知道sql是不区分大小写的,但是保持统一的风格以及让oracle免去这一次转换也是很有意义的;
4、能不用in的尽量别用in,用exists代替。对于内表和外表同样数量级来说exists和in的效率差别不是很大,但对于内表特别大的sql,我们用in的效率就很底下。鉴于此,我们还是尽量减少用in的使用频率,由于说不好你那天的内表数据量就特别大了!
5、减少to_char、substr等函数在索引字段上的使用。若强制使用会导致索引失效,我们针对具体的sql可以看执行计划进行分析验证;
6、用主键关联一个表查某几个字段的时候,尽量使用子查询,会优先使用主键的唯一索引;
7、程序中尽量减少拼接sql,使用预编译。一方面可以防止sql攻击,一方面各个数据库的执行机制也对预编译有优化,效率上更高。
以上都是笔者工作中总结出来的血的经验,尽管比较零散,但感觉有时候就是这少量小的点导致我们的sql执行效率特别低下。还有一点就是执行计划特别重要,我们肯定要养成多看执行计划的习惯。oracle数据库的话我们一般用pl/sql直接快捷键F5即可以看到执行计划,mySql的话用explain直接跟sql的形式即可以进行查看。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 三年程序员经验分享之sql优化