1. 程式人生 > 其它 >資料庫常用優化方案

資料庫常用優化方案

技術標籤:資料庫sqlsql優化

本篇部落格來源於各個網站,經過作者精心篩選後,整理出來的一些常用的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對於大於某值的查詢條件不成立,查不到任何記錄。

如果想找到從第二行記錄以後的記錄,當使用rownum>2是查不出記錄的,原因是由於rownum是一個總是從1開始的偽列,Oracle 認為rownum> n(n>1的自然數)這種條件依舊不成立,所以查不到記錄。詳細檢視部落格:oracle限制查詢條數-rownum用法詳解