sql优化
sql优化最重要的一点就是要建立合适的索引,据说50%以上的效率问题都是通过这个方法解决。
引用国内一位资深的ORACLE专家的话:"我其实只懂点(挨踢)知识,IT里面其实只懂点甲骨文,甲骨文里面其实只懂点数据库,数据库里面其实只懂点SQL,SQL里面其实只懂点索引"
sql优化思路:
一、从设计上
- 贴近业务
- 服从范式规范,一般都是要求3NF或BCNF
二、从访问上
注意保持几个原则
- 保持与数据库连接稳定 数据库连接非常耗资源,所以连接池之类技术很重要
- 分析清楚问题,再考虑解决问题 有时候问题不是如何去优化一个复杂的sql,而是这个复杂sql要干的事情有没有必要,或者有没有更直接办法
- 每条sql干尽可能多的事情,比如一次完成多个更新操作
- 将过程逻辑(for, if else)放入sql中,sql相对效率高
- 乐观激进型编程 由于sql查询消耗大,所以对于防范异常方面,不需要像过程式编程语言那样先一步步仔细检查,后在操作;更倾向于先直接操作,再统一检查。
1、建立合适索引
-- 都需要在a上建立索引 select a from T; select a, b from T1 join T2 on using(a);
有时也需要考虑 复合索引
2、避免没有利用上索引
假如在字段a上已经建立索引,如下形式会使用不上索引:
- <> 或者 !=
- is null
- 函数运算, f(a) > 100
- 模糊查询,特别是开头不确定的, a like '%xx%'
3、先过滤(where)。特别是在join之前,还要做好投影(select)
join是得到笛卡儿积,如果没有先做足够过滤,形成中间表可能非常大,以至于放到外存中存储。这样可能导致性能急剧下降。