資料庫常用優化方案
阿新 • • 發佈:2020-12-19
本篇部落格來源於各個網站,經過作者精心篩選後,整理出來的一些常用的sql優化案例。
1、SQL判斷是否“存在”,還在用count操作?
業務程式碼中,需要根據一個或多個條件,查詢是否存在記錄,不關心有多少條記錄。
普遍寫法:
/*SQL寫法*/ SELECT COUNT(*) FROM table WHERE a=1 AND b=2; //或者 SELECT COUNT(0) FROM table WHERE a=1 AND b=2; /*Java寫法*/ int nums = xxDao.countXxxxByXxx(params); if (nums > 0) { //當存在時,執行這裡的程式碼 } else { //當不存在時,執行這裡的程式碼 }
優化方案:
/*SQL寫法*/
SELECT 1 FROM table WHERE a=1 AND b=2 LIMIT 1; //Mysql
SELECT 1 FROM table WHERE a=1 AND b=2 AND ROWNUM=1; //Oracle
/*Java寫法*/
Integer exist = xxDao.existXxxxByXxx(params);
if (exist != NULL) {
//當存在時,執行這裡的程式碼
} else {
//當不存在時,執行這裡的程式碼
}
拓展知識:
關於Oracle中的ROWNUM限制查詢條數。對於ROWNUM來說它是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配是1,第二行是2,依此類推,這個偽欄位可以用於限制查詢返回的總行數,且ROWNUM不能以任何表的名稱作為字首。ROWNUM對於大於某值的查詢條件不成立,查不到任何記錄。