sql優化,有和無得區別,count的缺點!

在我們寫程序的時候,不難會出現要判斷數據庫中是否存在此條記錄的情況,一般情況下,我們都是怎麼處理呢?

##### SQL寫法:
SELECT count(*) FROM table WHERE a = 1 AND b = 2

##### Java寫法:
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
		//當存在時,執行這裏的代碼
} else {
		//當不存在時,執行這裏的代碼
}

這樣的話會有很多缺點,什麼缺點呢?這樣的sql會把數據庫中所有符合"a=1 and b=2"這個條件的信息返回出來。
說白了會進行一次全表查詢,這樣的話是非常耗時的,如果數據多的情況下,就算是加了索引也會有所影響!
其實最關鍵的是,這個sql往往並不是核心業務的sql,更多的時候是爲核心業務進行一次篩選。
無論怎麼說,這個sql是非常不友好的。

那我們該怎麼寫的?

##### SQL寫法:
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

##### Java寫法:
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
		//當存在時,執行這裏的代碼
} else {
		//當不存在時,執行這裏的代碼
}

SQL不再使用count,而是改用LIMIT 1,讓數據庫查詢時遇到一條就返回,不要再繼續查找還有多少條了

業務代碼中直接判斷是否非空即可

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