建议不要用“*”来代替所有的列名
Oracle数据库中select语句中“*”会存在动态解析问题,建议采用实际列名。
1、用TRUNCATE代替DELETE进行数据删除
delete进行数据删除,Oracle会把恢复信息存储到撤销表空间中,如果没有commit命令,而是rollback,表中的数据会恢复到删除之前的状态。使用truncate对表中的数据进行删除时,系统不会将被删除的数据写到回滚段,速度提高很多。
2、尽量多使用commit语句
在PL/SQL块中,DML语句写到BEGIN...END块中,在END前面写COMMIT语句,及时释放事务所占资源。
3、减少表的查询次数
对同一个表的多条件多次查询语句尽量合并在一个查询语句中进行查询。
4、用[NOT] EXISTS 代替 [NOT] IN
5、选择驱动表
驱动表是最先被访问的表(通常是全表扫描),紧跟在FROM后边的表,如果表的数据量较大,且没有索引,比较适合一次性的批量读取,可以作为驱动表。
6、where子句的顺序
Oracle采用自下而上的顺序解析where子句,表之间的连接必须写在其他where子句条件之前,可以过滤掉最大数据记录的条件写在where子句的末尾。
7、索引的使用
列少,大多数查询包含简单的where语句,经常查询关键字为基础的表。
8、避免全表扫描
全表的扫描的情况:语句中含有LIKE、IS NULL、IS NOT NULL、!= 或者<>