从事软件开发的人员或者多或者少都会碰到过数据库优化的问题,尽管针对不同的数据库,专业的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-15册 基地七部曲+机器人五部曲+帝国三部曲 阿西莫夫著 七年级下册7下初中生青少年课外阅读书科幻小说全集
植物大战僵尸二2机器人漫画书全22册儿童科普百科全书小学生三四五年级课外阅读书籍超能拯救大逆袭漫少儿童爆笑卡通连环画故事书
【任选】植物大战僵尸2恐龙漫画系列正版全套全集46本 新版爆笑漫画书科学机器人成语吉品系列小学生三四五年级儿童课外故事图书籍
【出版社旗舰店】程序员的数学1-4 概率统计/线性代数/ 图论入门 结城浩算法基础机器学习程序设计教材编程开发基础知识入门教程书
全62册植物大战僵尸2二科学漫画书儿童百问百答爆笑图画书恐龙机器人卡通连环画小学生三四五年级课外阅读书籍少幼儿科普百科全书
套装 官网正版 自动化机构设计工程师速成宝典 柯武龙 共4册 入门 实战 高 级篇凸轮机构设计7日通 工业机器人集成应用 非标自动化