我常常會聽到一些同事對自己的sql很有信心,往往說一句:「你看,已經走索引了」。但是我們真的使用了適合我們的索引嗎?
我抓取到一句sql,消耗了太多的io。
select smin_infoid,nvl(mi.monu_province,
'未知'),
count
(*) i_resultnum
from tbl_wap*** ware,tbl_sms*** smin,tbl_mobile*** mi,tbl_user*** usin
where ware_date > :b2
and ware_date <= :b2 + :b1 /24
and ware.ware_uid_fk=usin.usin_uid_fk
and substr(usin.usin_phnum,1,7)=mi.monu_phonenum(+)
and ware_wruiid_fk=smin.smin_infoid
group
by smin_infoid ,mi.monu_province
因為tbl_wap***資料量比較大,而造成該sql執行緩慢並且io消耗高。看看它的sql執行計畫和成本估算(如下圖)
注意畫框index(為tbl_wap***的相關索引),雖然走了索引,但是成本和cardnility都很高。檢查這個索引發現其實blevel只有2。而再仔細檢視sql並詢問實現的功能,其實索引的字段為date型別,該sql只是檢查最近幾個小時的資訊變化.
在where條件中(ware_date > :b2)因為是範圍查詢,索引使用了(rang scan),加之該錶資料量眾多(千萬級別),直接影響了sql執行效能。
但是通過檢查發現,這個索引就是直接建立的b-tree索引。而我注意到其實該sql檢查的就是最近乙個或幾個小時的資料,終於可以找到一些問題所在了。index建立時預設情況下,索引的字段採用公升序(asc)建立,而這種方法顯然是不適合當前這個sql的,我們可以通過建立基於降序的索引來適應實際的需求。
sql>
create
index idx_ware_date1
on tbl_wap***x(ware_date
desc)
2 tablespace usertbs;
再來檢查執行的sql計畫和預算成本:
執行成本大幅降低。index的建立時索引字段排序的方式其實對特定sql影響還是很大的。尤其是一些歷史流水表,在某些情況下只是查詢近期的資料時,就顯得尤為重要了。
ps:最近總是很忙,忙的只有在睡覺前才有時間寫點東西。但是實在太累,總是無法好好的寫。真的要好好堅持堅持呀 -:),否則年初的目標就很難完成了。
EurekaLog 對Delphi執行緒的影響
eurekalog在delphi中使用後,會對執行緒有影響,主要是對執行緒自動釋放的影響,看下面的例子 判斷執行緒是否結束可以使用下面的方法 if assigned testthread and not testthread.finished then 執行緒沒有結束 如果使用了eurekalog再...
letter spacing屬性對居中的影響
轉,在設計乙個網頁的時候,有時候為了讓頁面的可讀性更好,更加美觀 就會使用到letter spacing屬性 letter spacing屬性是增加 值為正 或減少 值為負 字元間距 也就是說當應用在英文是,就是增加或減少每個字母之間的間距,在中文文字中應用就是每個文字之間的間距 然後我就遇到了問題...
Tab控制項標籤頁的顯示方式對標籤內容的影響
有很多應用是在tab控制項的每個標籤頁中填入內容,通常的做法是,如果啟用預設的標籤頁,預設內容就顯示,而沒有被啟用的標籤頁,內容是不顯示的,這裡可以是動態載入的,比如切換標籤頁的時候,才去載入其內容。有時候,內容的顯示尺寸是動態的,它可能超出你所指定的範圍,假如你固定死它的尺寸,即使出現下拉滾動條也...