在我們寫程序的時候,不難會出現要判斷數據庫中是否存在此條記錄的情況,一般情況下,我們都是怎麼處理呢?
##### 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,讓數據庫查詢時遇到一條就返回,不要再繼續查找還有多少條了
業務代碼中直接判斷是否非空即可