Oracle数据库后端优化建议
时间:2019-03-06 16:56 来源:linux.it.net.cn 作者:IT
一、使用参数化sql语句:
非参数化的sql语句一般都需要硬解析,使用参数化的sql语句就能充分使用解析后的sql语句,从而达到了优化的效果。
二、管理对数据量巨大的表的访问:
前期表的数据量都不会太大,因此我们要提前预估到那些表的数据量将是巨大的,并提前规划和管理对这些表的访问。
数据量大的表的全表查询不但会产生文件读取(磁盘IO)还会使Oracle实例系统全局区中的数据缓冲区充满,因而当用户访问其它比较常用的数据时就需要从文件读取,产生了磁盘IO因此大大地降低了效率。
三、数据量大的时候避免在数据库中进行排序
中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。
四、优化子查询
避免在子查询中使用group by和order by,主要是为了减小中间数据量。中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。
五、视图
如果视图中存在group by,尽量先用where过滤,也是为了减小中间数据量。中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。
六、使用UNION ALL代替UNION
UNION相当于多使用了一个distinct,而distinct去重复效率不高尽量避免。
七、避免在SQL中使用PL/SQL的功能
库缓存中sql解析缓存区和pl/sql解析缓存区是分开的,在sql中调用存储过程的话,系统在sql解析缓存中找不到pl/sql,因此会重新解析一次
(责任编辑:IT)
一、使用参数化sql语句: 非参数化的sql语句一般都需要硬解析,使用参数化的sql语句就能充分使用解析后的sql语句,从而达到了优化的效果。 二、管理对数据量巨大的表的访问: 前期表的数据量都不会太大,因此我们要提前预估到那些表的数据量将是巨大的,并提前规划和管理对这些表的访问。 数据量大的表的全表查询不但会产生文件读取(磁盘IO)还会使Oracle实例系统全局区中的数据缓冲区充满,因而当用户访问其它比较常用的数据时就需要从文件读取,产生了磁盘IO因此大大地降低了效率。 三、数据量大的时候避免在数据库中进行排序 中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。 四、优化子查询 避免在子查询中使用group by和order by,主要是为了减小中间数据量。中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。 五、视图 如果视图中存在group by,尽量先用where过滤,也是为了减小中间数据量。中间数据量过大会导致计算产生中间数据从内存中置换到temp表空间从而产生不必要的磁盘IO。 六、使用UNION ALL代替UNION UNION相当于多使用了一个distinct,而distinct去重复效率不高尽量避免。 七、避免在SQL中使用PL/SQL的功能 库缓存中sql解析缓存区和pl/sql解析缓存区是分开的,在sql中调用存储过程的话,系统在sql解析缓存中找不到pl/sql,因此会重新解析一次 (责任编辑:IT) |