ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle 性能优化(一)

oracle 性能优化(一)

原创 Linux操作系统 作者:Nalternative 时间:2011-05-19 21:08:44 0 删除 编辑

SELECT BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID=2314
/
--WEB_ID上有索引,强制全表扫描,注意:如果表使用了别名那么提示也必须使用别名
SELECT /*+ FULL(BU) */ BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID=2314
/
--指定多个提示:执行全表扫描和缓存表名,用空格将多个提示分开
SELECT /*+ FULL(BU) CACHE(BU)*/ BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID=2314
/
--FIRST_ROWS一般会强制使用某些索引,而在正常环境下可能不会使用这些索引
SELECT COUNT(*)
FROM BLOG_USER----742643数据量

1、SELECT BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID>=2314


2、SELECT /*+ FIRST_ROWS(10) */ BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID>=2314


1、2两者,第一个执行全表扫描,第二个会走索引, 第二个的代价就是检索很多行时速度将会非常慢,在这个例子中也确实比第一个慢
/
--ALL_ROWS以最快速度检索出所有行(最佳吞吐量)
/
--NO_INDEX提示 禁止优化器使用某个索引
SELECT /*+ NO_INDEX(BU IDX_BLOG_USER_WEBID) */ BLOG_ID ,WEBROOT
FROM BLOG_USER BU
WHERE BU.WEB_ID=2314

限制不使用多个索引

SELECT /*+ NO_INDEX(S IDX_STUDENT_NAME) NO_INDEX(C IDX_UN_CONNECTOR) NO_INDEX(C IDX_CONNECTOR_UNITID) NO_INDEX(U PK_UNIT) */ C.MOBILE
/
--INDEX_JOIN提示  将一个表的各个不同索引进行合并,这样只需要访问这写索引就行了,节省了重新索引表的时间
1、
SELECT /*+ INDEX_JOIN( BU IDX_BLOG_USER_WEBID IDX_BLOG_USER_BLOGID) */ BLOG_ID ,WEB_ID
FROM BLOG_USER BU
WHERE BLOG_ID=213
AND WEB_ID=235
---==
 SELECT STATEMENT,7,1,12,0,0
  VIEW--index$_join$_001 (VIEW),7,1,12,0,0
   HASH JOIN,0,0,0,0,0
    INDEX (RANGE SCAN)--IDX_BLOG_USER_WEBID (INDEX),3,1,12,0,0
    INDEX (RANGE SCAN)--IDX_BLOG_USER_BLOGID (INDEX),3,1,12,0,0
 比使用索引并通过rowid扫描整个表要快5倍
               
2、
SELECT  BLOG_ID ,WEB_ID
FROM BLOG_USER BU
WHERE BLOG_ID=213
AND WEB_ID=235
 SELECT STATEMENT,4,1,12,0,0
  TABLE ACCESS (BY INDEX ROWID)--BLOG_USER (TABLE),4,1,12,0,0
   INDEX (RANGE SCAN)--IDX_BLOG_USER_WEBID (INDEX),3,1,0,0,0

/
--index_combine合并位图索引
/
--index_asc  index_desc 升序扫描索引和降序扫描索引
/
--index_ffs 提示应该执行一次索引的快速全局扫描。只访问索引,而不是对应的表,只有查询需要检索的信息都在索引上时才使用索引的快速全局扫描。特别在表有很多列时,使用该提示可以极大地改善性能。
和index_join有点像啊


/
ordered 提示会按照具体的顺序访问表
/
--leading提示  当查询的复杂程度增加时,可以指出先访问哪一个表,但不可能知道下面将访问哪个表。
/
---NO_EXPAND
SELECT /*+ FIRST_ROWS NO_EXPAND */ BLOG_ID,WEB_ID
FROM BLOG_USER BU
WHERE PROVINCE=1
AND    (BU.BLOG_ID BETWEEN 2341 AND 4561
OR     BU.BLOG_ID BETWEEN 43531 AND 53531
OR     BU.BLOG_ID BETWEEN 63531 AND 73531
OR     BU.BLOG_ID BETWEEN 83531 AND 93531);

0.317秒
/
SELECT   BLOG_ID,WEB_ID
FROM BLOG_USER BU
WHERE PROVINCE=1
AND    (BU.BLOG_ID BETWEEN 2341 AND 4561
OR     BU.BLOG_ID BETWEEN 43531 AND 53531
OR     BU.BLOG_ID BETWEEN 63531 AND 73531
OR     BU.BLOG_ID BETWEEN 83531 AND 93531);
1秒
/
--driving_site  提示用于处理实际连接的驱动站点
可以将很少行发送到远程站点上,而不是将整个远程表发送回本地站点来管理
/
--use_merge提示
/
--use_nl提示 使用嵌套循环  以最快速度返回第一行
/
--use_hash提示 必须拥有足够大的hash_area_size
/
--push_subq 提示
/
--parallel提示 并行查询
SELECT   /*+ parallel(BU) */BLOG_ID,WEB_ID
FROM BLOG_USER BU
WHERE PROVINCE=1
AND    (BU.BLOG_ID BETWEEN 2341 AND 4561
OR     BU.BLOG_ID BETWEEN 43531 AND 53531
OR     BU.BLOG_ID BETWEEN 63531 AND 73531
OR     BU.BLOG_ID BETWEEN 83531 AND 93531);
/
--no_parallel提示,如果建立表时已经设置了并行度,可以使用这个
/
--append 提示 不会检查当前是否有插入操作所需要的块空间,相反它会直接将数据添加到新块中。
--noappend 提示
/
--cache提示
cache提示会将全表扫描全部缓存(固定)到内存中,可以在建立表时使用cache选项,这样在第一次访问表时就可以对其进行缓存
--nocache 提示

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25323853/viewspace-695795/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-02-09

  • 博文量
    123
  • 访问量
    175061