sql優化案例一:使用了表示式不會使用索引
最近在客戶那做資料庫效能調優時,發現一些程式開發的sql 寫法確實不好,導致
使用不上索引,佔用cpu過高,而影響應用,資料庫採用的是RBO模式
以下是一個測試方法;
在開發中 sql寫法類式是
select * from test where test_date+1>to_date('2008-09-26','yyyy-mm-dd');
這樣就不會用上索引
而改成下面這樣就可以用上
select * from test where test_date>to_date('2008-09-26','yyyy-mm-dd')-1;
SQL> select * from test where test_date+1>to_date('2008-09-25','yyyy-mm-dd');
ID TEST_DATE
---------- ----------
1 27-9月 -08
1 26-9月 -08
1 25-9月 -08
1 25-9月 -08
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'TEST'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
16 consistent gets
0 physical reads
0 redo size
493 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4 rows processed
SQL> select * from test where test_date>to_date('2008-09-25','yyyy-mm-dd')-1;
ID TEST_DATE
---------- ----------
1 25-9月 -08
1 25-9月 -08
1 26-9月 -08
1 27-9月 -08
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'
2 1 INDEX (RANGE SCAN) OF 'IDX_TEST' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
493 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
4 rows processed
SQL>
一致性讀從16降到6,目前測試的資料量比較小,但如果資料量很大,那將是一個
很大的效能提升
以下幾種操作會顯示的阻止oracle使用索引
2, f1 is null, f1 is not null, f1 not in, f1 !=, f1 like ‘%pattern%’;
3, Not exist
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-464608/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL優化案例-自定義函式索引(五)SQL優化函式索引
- SQL優化案例-正確的使用索引(二)SQL優化索引
- SQL優化案例一則--複合索引沒有被使用SQL優化索引
- SQL優化--函式索引SQL優化函式索引
- SQL優化案例-分割槽索引之無字首索引(六)SQL優化索引
- Oracle效能優化-SQL優化(案例一)Oracle優化SQL
- MySQL SQL優化案例(一)MySql優化
- 高效的SQL(函式索引優化VIEW一例)SQL函式索引優化View
- Oracle優化案例-自定義函式索引(五)Oracle優化函式索引
- SQL優化-索引SQL優化索引
- 使用SQL Profile進行SQL優化案例SQL優化
- 記一個SQL優化案例SQL優化
- sql優化之多列索引的使用SQL優化索引
- SQL優化案例-使用with as優化Subquery Unnesting(七)SQL優化
- SQL優化中索引列使用函式之靈異事件SQL優化索引函式事件
- 一個複合索引的優化案例索引優化
- SQL最佳化案例-自定義函式索引(五)SQL函式索引
- 效能優化案例-SQL優化優化SQL
- 優化案例--重建索引引發的sql效能問題優化索引SQL
- Oracle優化案例-正確的使用索引(二)Oracle優化索引
- SQL最佳化案例一則--複合索引沒有被使用SQL索引
- SQL優化(二)(聯合索引的使用)SQL優化索引
- SQL最佳化案例-正確的使用索引(二)SQL索引
- Oracle 某行系統SQL優化案例(一)OracleSQL優化
- 聊聊索引和SQL優化索引SQL優化
- Oracle效能優化-SQL優化(案例二)Oracle優化SQL
- Oracle效能優化-SQL優化(案例三)Oracle優化SQL
- Oracle效能優化-SQL優化(案例四)Oracle優化SQL
- 複合索引與函式索引優化一例索引函式優化
- SQL效能優化案例分析SQL優化
- SQL優化之利用索引排序SQL優化索引排序
- 正規表示式案例分析 (一)
- Oracle優化案例-分割槽索引之無字首索引(六)Oracle優化索引
- SQL優化案例-union代替or(九)SQL優化
- greenplum 簡單sql優化案例SQL優化
- 不走索引場景的一次分析優化索引優化
- SQL優化之多表關聯查詢-案例一SQL優化
- Mysql索引優化(一)MySql索引優化