WEB开发网
开发学院数据库Oracle Oracle数据库体系框架及SQL语句性能探讨 阅读

Oracle数据库体系框架及SQL语句性能探讨

 2007-05-06 12:07:02 来源:WEB开发网   
核心提示: 注:在不同的书中,对是否使用索引的读取记录的百分比值不太一致,Oracle数据库体系框架及SQL语句性能探讨(4),基本上是一个经验值,但是读取记录的百分比越低,增加sort_multiblock_read_count的值使每次读取更多的内容,减少运行次数,使用索引越有效, 2. 如果列上

注:在不同的书中,对是否使用索引的读取记录的百分比值不太一致,基本上是一个经验值,但是读取记录的百分比越低,使用索引越有效。

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的值使每次读取更多的内容,减少运行次数,提高性能。

上一页  1 2 3 4 

Tags:Oracle 数据库 体系

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接