不要让Oracle做得太多
- 避免复杂的多表关联
- 避免使用“ * ”
-
避免使用耗费资源的操作
带有DISTINCT、UNION、INTERSECT、OREDER BY的SQL语句,会启动SQL引擎去执行消耗资源的排序功能
1.用EXISTS 替换 DISINCT
2.用UNION ALL 替换 UNION
给优化器更明确的命令
-
自动选择索引
如果表中有两个或两个以上索引,并且其中有一个唯一性索引,其他是非唯一性的,此时,Oracle将使用唯一性索引而完全忽略非唯一性索引。 -
避免在索引列上使用函数或者计算列
在where子句中,如果索引列是函数的一部分或存在列的计算,优化器将不使用索引而使用全表扫描。 -
避免在索引列上使用NOT
与上点相同,在索引列中使用NOT也会使得优化器进行全表扫描,即当Oracle遇到NOT时,就会停止使用索引而执行全表扫描。 -
避免使用前置通配符
形如:'%123';这种 -
避免使用IS NULL\IS NOT NULL
优化器会忽略索引 -
避免出现索引列自动转换
当比较不同数据类型的数据时,Oracle会自动对列进行简单的类型转换。例如:User_no是字符类型的索引列 User_no = 123; 实际自动转换成 TO_NUBER(User_no)= 123;
网友评论