
时间:2015-06-28 00:00 来源:IT猫扑网|http://www.itmop.com/ 作者:网管联盟 我要评论(0)
网站速度变慢时,你会考虑到什么解决方法?笔者最近公司网站的速度一起很不理想,文章页面基本都要 10s 以上才能打开。数据库用的是 oracle 10g Express Edtion,存放文章的表超过了 10 万数据量,类似执行一个 select count(1) from res where class_id=1 这样的语句就经常在 10s 以上。然而,今天我在 class_id 上加了一个索引,这条语句的执行时间就几乎变成了 0s。效果之显著,完全出乎我的预料。下面是Oracle 10g sql优化相关的总结:
1. 监控 select 语句
(&数据库主页&从开始菜单里&Oracle Database 10g Express Edition&的&转至数据库主页&进入)
进入&数据库主页>管理>数据库监视器>会话>SQL&页面,在&搜索&里输入&select&,点击&开始&。这样就可以看到最近执行的 select 语句。点击&SQL&列里的 SQL 语句链接,查看执行情况。其中,&CPU时间&即为执行所用的时间,&已处理的行数&为查询结果的行数。下面的&SQL文本&是 SQL 语句的完整内容,&索引&区域显示该查询使用了哪个索引。
找到&CUP时间&超过 1 秒的查询,看是否需要添加索引。
2. 添加索引
进入&数据库主页>对象浏览器&页面,在右边偏上方有一个&创建&按钮。点击&创建& 按钮,在出现的菜单里选择&索引&,然后输入&表名&,&索引类型&使用&常规&,再点击&下一步&。
在新出现的页面,输入索引的名称和索引列。如果是不唯一的字段,最好将&单性值&设置为唯一,可能有助提高检索速度。再点击&下一步&,点击&完成&按钮。
照我的理解,创建索引时选择什么索引列,应该是由 select 语句的 where 部分决定的。比如 where id=1 ,只需选择 id 一个索引列;如果是 where id=1 and name=2 ,则需要选择 id 和 name 两个索引列来创建索引。只对主键进行索引,因为是唯一的,所以将&单性值&设置为&唯一&。
数据量比较大的表,都应在其主键上创建一个索引,其它需要的另加。
order by 语句里的字段,一般无法使用索引,所以,尽量在 order by 之前将查询结果的行数缩到最少。
要提高 order by 语句的执行效率,可适当增加 sort_area_size 的值( 10240000=10m ):
alter system set sort_area_size=10240000 scope=spfile;
这样就实现了Oracle 10g sql优化的索引优化。
附一:为表添加主键
进入&数据库主页>对象浏览器&页面,在左则选择要创建主键的表。在右边出现的表页面中,点击&约束条件&->&创建&,&约束条件类型&设置为&主键&,其它自行填写。
附二:Oracle 配置参数查询语句
SELECT NAME,VALUE
FROM v$parameter
WHERE NAME IN
(’sga_max_size’,'db_cache_size’,
’shared_pool_size’,’shared_pool_reserved_size’,'large_pool_size’,'java_pool_size’,
‘db_block_size’,'db_block_buffers’,'log_buffer’,’sort_area_size’,’sort_area_retained_size’,
‘hash_area_size’,’sessions’,'open_cursors’
)ORDER BY NAME;
附三:其它参数设置命令
alter system set sga_max_size=700m scope=spfile;
alter system set sga_target=700m scope=spfile;
关键词标签:Oracle,sql优化
相关阅读 误删Oracle数据库实例的控制文件 为UNIX服务器设置Oracle全文检索 Oracle数据库如何查找删除重复的SQL语句 Oracle导入导出数据库的语法 oracle数据库安装预环境一键处理脚本 oracle常用DBA命令
热门文章
误删Oracle数据库实例的控制文件
利用Oracle分区表来减少磁盘I/O冲突
Oracle数据库优化之数据库磁盘I/O
讲解Oracle复制技术的分布式系统同步应用
刷新Oracle缓存
oracle 8080与TOMCAT默认端口冲突
人气排行 oracle中使用SQL语句修改字段类型-oracle修改SQL语句案例 Oracle中使用alter table来增加,删除,修改列的语法 ORACLE SQL 判断字符串是否为数字的语句 ORACLE和SQL语法区别归纳(1) oracle grant 授权语句 ORACLE修改IP地址后如何能够使用 如何加速Oracle大批量数据处理 Oracle删除表的几种方法 Oracle 10g创建表空间和用户并指定权限 Oracle连接数太多报错-ORA-12516错误 Oracle字符串截取 连接Oracle数据库的Hibernate配置文件
查看所有0条评论>>