原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中加上試試,果然效果明顯。