SQL优化与规范

  1. 避免复杂的多表关联。
  2. 避免使用*:只提取你所要使用的列;使用别名加快解析速度。
  3. 避免使用耗费资源的操作,例如DISTINCT/UNION/MINUS/INTERSECT/ORDER BY:通常UNIONS、MINUS、INTERSECT都可以用其他方式重写。
  4. 自动选择索引:如果表中唯一性索引和非唯一性索引共同存在,ORACLE将使用唯一性索引而完全忽略非唯一性索引。
  5. 至少要包含组合索引的第一列:如果索引是建立在多个列上,只有在它第一列被where字句引用时,优化器才会选择使用该索引。
  6. 避免在索引列上使用函数:避免在where子句中对索引字段进行计算,使用WHERE SAL>25000/12替代SAL*12>25000。
  7. 避免使用前置通配符,如'%23423‘,索引将失效。
  8. 避免在索引列上使用NOT,例如NOT=0,可以使用>0替代。
  9. 避免在索引列上使用IS NULL和IS NOT NULL,空值不存在于索引列中。
  10. 避免出现索引列自动转换,避免将字符串类型和数字类型进行比较。
  11. 在查询时尽量少用格式转换,尽量直接进行比较。
  12. 减少访问数据库的次数。
  13. 使用DECODE减少处理时间,P17。
  14. 减少对表的查询,可以使用WHERE (col1,col2)=(SELECT col1,col2 FROM tb WHERE xxx)。
  15. WHERE字句中连接顺序,将返回行可能最少(最具有选择性部分)的字句放在最后。
  16. 最好不要在WHERE字句中使用函数或表达式,如果使用则使用相同的表达式或函数。
  17. 联接列:有联接的列无法使用索引。
  18. 用WHERE替换HAVING,WHERE字句可以限制记录的数目。
  19. 用索引提高效率。
  20. 用>=替代>。
  21. 通过使用>=、<=,避免使用NOT命令。
  22. 如果有其它办法,不要使用子查询。
  23. 外部联接“+”,可以替代效率低下的not in,P29。
  24. 尽量多使用COMMIT。
  25. 用TRUNCATE替代DELETE。
  26. 计算统计条数,速度:COUNT(索引)>count(*)>count(1)。
  27. 驱动表:应用查询的限制条件后,返回较少行源的表作为驱动表。
  28. 被探查表:从驱动表中得到数据后,在该表寻找符合连接条件的行。
  29. 组合索引:限制条件包含先导列时,才会使用该组合索引。
  30. 可选择性:唯一键的数量/表中的行数越接近1,越适合创建索引。
  31. 通过get_ddl获得建表语句后再建表P38。
  32. drop或truncate需要先备份,先确定该表记录数,生产上禁止,需要再三核对。
  33. alter需要先确定记录数,连续查询确认是否有不停的数据插入和变更,禁止数据量不断变化的表和数据量大的表操作,除非确认没有程序访问,not null字段的修改需要长时间锁表。如一定要操作,先创建临时表。
  34. delete和update严禁不带where条件,需要先查看表大小,业务期间禁止对大表全局操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值