Oracle数据库体系框架及SQL语句性能探讨
2007-05-06 12:07:02 来源:WEB开发网注:在不同的书中,对是否使用索引的读取记录的百分比值不太一致,基本上是一个经验值,但是读取记录的百分比越低,使用索引越有效。
2. 如果列上有建索引,什么SQL查询是有用索引(INDEX)的?什么SQL查询是没有用索引(INDEX)的?
存在下面情况的SQL,不会用到索引:
存在数据类型隐形转换的,如:
select * from staff_member where staff_id=’123’;
列上有数学运算的,如:
select * from staff_member where salary*2<10000;
使用不等于(<>)运算的,如:
select * from staff_member where dept_no<>2001;
使用substr字符串函数的,如:
select * from staff_member where substr(last_name,1,4)=’FRED’;
‘%’通配符在第一个字符的,如:
select * from staff_member where first_name like ‘%DON’;
字符串连接(||)的,如:
select * from staff_member where first_name||’’=’DONALD’
3. 函数的索引
日期类型也是很容易用到的,而且在SQL语句中会使用to_char函数以查询具体的的范围日期。如:select * from staff_member where TO_CHAR(birth_day,’YYYY’)=’2003’; 我们可以建立基于函数的索引如:CREATE INDEX Ind_emp_birth ON staff_member (to_char((birth_day,’YYYY’));
二、 SQL语句排序优化
1. 排序发生的情况:
SQL中包含group by 子句;
SQL 中包含order by 子句;
SQL 中包含 distinct 子句;
SQL 中包含 minus 或 union操作;
创建索引时。
2. 排序在内存还是在磁盘中进行?
在内存执行的排序速度要比在磁盘执行的排序速度快14000倍。如果是专用连接,排序内存根据INIT.ORA的sort_area_size进行分配,如果是多线程服务连接,排序内存根据large_pool_size进行分配。
sort_area_size的增大可以减少磁盘排序,但是过大将使ORACLE性能降低,因为所用的连接回话都会分配到一个sort_area_size大小的内存,所以,为了提高有限的查询速度,可能会浪费大量的内存。增加sort_multiblock_read_count的值使每次读取更多的内容,减少运行次数,提高性能。
- ››oracle 中 UPDATE nowait 的使用方法
- ››Oracle ORA-12560解决方法
- ››Oracle 10g RAC 常用维护命令
- ››Oracle如何在ASM中定位文件的分布
- ››Oracle的DBMS_RANDOM.STRING 的用法
- ››oracle 外部表导入时间日期类型数据,多字段导入
- ››Oracle中查找重复记录
- ››oracle修改用户登录密码
- ››Oracle创建删除用户、角色、表空间、导入导出等命...
- ››Oracle中登陆时报ORA-28000: the account is lock...
- ››Oracle数据库在配置文件中更改最大连接数
- ››Oracle中在pl/sql developer修改表的两种方式
更多精彩
赞助商链接