一個sql的優化: 儘量在where中排除不需要的數據

原sql如下:

select 

t1.*

from t1

inner join t2 on t1.c_str1=t2.c_str1

where t1.n_create between 20130101 and 20130430;

說明:

表t1和表t2數據量都很大,t1.c_str1是varchar字段,不是任何key,t2.c_str1是unique key,sql最初開發時執行情況還可以,過了一段時間後頻繁出現超時的情況,這種情況是不能接受的,必須優化。


優化後:

select 

t1.*

from t1

inner join t2 on t1.c_str1=t2.c_str1

where t1.n_create between 20130101 and 20130430

and t1.c_str1 > '';


說明:

在sql的where部分加了一句 t1.c_str1 > '', 執行耗時20多秒,還可以接受。

加這個條件的前提是t1.c_str1中絕大部分是沒有值的,基本都是NULL或者'',因爲t1.c_str1=t2.c_str1,所以肯定有t1.c_str1 > '',想到在where中加上試試,果然效果明顯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章