本篇博客來源于各個網站,經過作者精心篩選后,整理出來的一些常用的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用法詳解,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/237130.html
標籤:其他
上一篇:CentOS 8.2上安裝部署MongoDB 4.4
下一篇:postgresql洗掉用戶提示ERROR: role postgres1 cannot be dropped because some objects depend on it
