首页 > Linux操作系统 > Linux操作系统 > oracle 性能优化(一)
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有点像啊
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25323853/viewspace-695795/ ,如需转载,请注明出处,否则将追究法律责任。