Oracle Sql優化一例 利用函式索引

2022-05-04 06:09:13 字數 834 閱讀 9213

在awr報告中,發現有個sql效率很低:

select batch_status from  t_batch_info

where batch_status='0' 

and sys_id='stm06';

檢視執行計畫發現查詢利用了索引,索引中包含了batch_status欄位,但是通過以下sql查詢:

select batch_status,count(*) from t_batch_info 

group by batch_status

發現batch_status欄位的值很少:

batch_status count(*)

0   40350

1   4237357

2   1227

3   433515

之前sql的查詢條件是batch_status='0',它只有4萬多條資料,而絕大部分都是1,有400多萬條資料,因此雖然用到了索引,但是使用效率低,

為解決這個問題,建立了函式索引,利用null值不進索引的特性,

create index ix_t_batch_info  on t_batch_info (decode(batch_status,'1',null,'2',null,'3',null,batch_status)) online;

而查詢語句改成:

select batch_status from  t_batch_info

where decode(batch_status,'1',null,'2',null,'3',null,batch_status)='0' 

and sys_id='stm06';

經過驗證,效率提高很多。

Oracle SQL優化之使用索引提示一例

今天早上在做資料庫的安檢時候,發現乙個ora 01555錯誤 這個sql語句明顯執行了很長時間而沒有完成。在觀察statspack報告中這個sql也在top sql中占用了大量的db cache。物理讀很大。下午做完其他的就打算優化一下這個sql 首先檢視這個sql的執行計畫 在pl sql dev...

演算法優化一例

本文將以排序演算法中的插入排序為例,介紹優化演算法,編制高效程式的方法。人們通常用於排序手中橋牌的方法是一次考慮一張牌,將它插入到已經排序過的牌的適當位置中 時刻讓它們保持有序 在計算機實現中,我們需要將較大的元素移到右邊,為插入的元素準備空間,然後再在空位置上插入該元素。該演算法的通常的乙個實現如...

sql優化一例

原sql,查詢總數300,每頁15資料也要8秒 select a from table where date format my time,y m d 2012 08 15 limit 0,15 優化後的sql,查詢總數18000,每頁15的資料只要1秒 select a from table wh...