优化法则
- 减少数据访问(磁盘访问)
- 返回更少数据(减少网络传输或磁盘访问)
- 减少交互次数(减少网络传输)
- 减少服务器CPU开销
- 利用更多资源
数据库访问优化法则
创建并正确使用索引
1. 分类:
B-TREE索引、位图索引、全文索引
2. 不能使用索引的情况:
“<>”、"not in “、函数或运算(function、 +)、模糊查询"like”、“is null”、 非未知字段。
3. 创建索引的条件:
- 字段出现在查询条件中
- 语句执行频率高
- 通过字段条件可筛选的记录集很小
例如:
主外键、有身份标识和意义的字段
返回更少的数据
分页
客户端分页
应用服务器分页
数据库sql 分页
只返回需要的字段
去除不必要的字段提高性能、
优点:
- 减少数据在网络上传输开销
- 减少服务器数据处理开销
- 减少客户端内存占用
- 字段变更时提前发现问题,减少程序BUG
- 如果访问的所有字段刚好在一个索引里面,则可以使用纯索引访问提高性能。
缺点:
增加编码工作量
减少交互次数
batchDML
进行批量提交。减少客户-服务端的交互次数,从而减少多次交互的网络延时开销,降低CPU开销。
使用存储过程
将业务逻辑封装在存储过程中,在客户端直接调用存储过程处理,减少网络交互成本。
缺点:
- 不可移植性
- 学习成本高
- 业务逻辑多处存在
- 语法函数不能满足
- 如果运算复杂,增加数据库服务端的处理成本。
- 变更问题。
建议: 尽量不适用。常用在报表统计 ETL任务中。
减少数据库服务器CPU运算
预编译sql
采用预编译的写法,可以:
- 防止sql注入
- 提高sql可读性
- 提高sql解析性能。
合理使用排序
如果你的两个表连接的条件都是等值运算,那可以采用Hash Join来提高性能,因为Hash Join使用Hash 运算来代替排序的操作。具体原理及设置参考SQL执行计划优化专题。
减少比较操作
- Like 模糊查询 是全表查询
- in List
复杂运算在客户的处理
利用更多资源
客户端多进程访问
多线程
数据库并行处理
ORAClE 性能优化
sql性能优化
- 尽量使用列名替代*
- Where 语句的解析顺序是从右向左的
- 尽量使用where替代having
- 尽量使用多表查询替代子查询
- 尽量使用绑定