SQL判斷是否"存在",還在用 count 操作?很耗時(shí)的!
根據(jù)某一條件從數(shù)據(jù)庫(kù)表中查詢 『有』與『沒有』,只有兩種狀態(tài),那為什么在寫SQL的時(shí)候,還要select count(*) 呢?
無論是剛?cè)氲赖某绦騿T新星,還是精湛沙場(chǎng)多年的程序員老白,都是一如既往的count.
目前多數(shù)人的寫法
多次 review 代碼時(shí),發(fā)現(xiàn)如現(xiàn)現(xiàn)象:
業(yè)務(wù)代碼中,需要根據(jù)一個(gè)或多個(gè)條件,查詢是否存在記錄,不關(guān)心有多少條記錄。普遍的SQL及代碼寫法如下
SQL寫法:
SELECT count(*) FROM table WHERE a = 1 AND b = 2
Java寫法:
int nums = xxDao.countXxxxByXxx(params); if ( nums > 0 ) { //當(dāng)存在時(shí),執(zhí)行這里的代碼 } else { //當(dāng)不存在時(shí),執(zhí)行這里的代碼 }
是不是感覺很OK,沒有什么問題
優(yōu)化方案
推薦寫法如下:
SQL寫法:
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1
Java寫法:
Integer exist = xxDao.existXxxxByXxx(params); if ( exist != NULL ) { //當(dāng)存在時(shí),執(zhí)行這里的代碼 } else { //當(dāng)不存在時(shí),執(zhí)行這里的代碼 }
SQL不再使用count,而是改用LIMIT 1,讓數(shù)據(jù)庫(kù)查詢時(shí)遇到一條就返回,不要再繼續(xù)查找還有多少條了
業(yè)務(wù)代碼中直接判斷是否非空即可
總結(jié)
根據(jù)查詢條件查出來的條數(shù)越多,性能提升的越明顯,在某些情況下,還可以減少聯(lián)合索引的創(chuàng)建。
到此這篇關(guān)于SQL判斷是否"存在",還在用 count 操作?很耗時(shí)的!的文章就介紹到這了,更多相關(guān)SQL判斷是否"存在"內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server 數(shù)據(jù)庫(kù)優(yōu)化
設(shè)計(jì)1個(gè)應(yīng)用系統(tǒng)似乎并不難,但是要想使系統(tǒng)達(dá)到最優(yōu)化的性能并不是一件容易的事。2009-07-07SQL Server免費(fèi)版的安裝以及使用SQL Server Management Studio(SSMS)連接數(shù)據(jù)庫(kù)的
這篇文章主要介紹了SQL Server免費(fèi)版的安裝以及使用SQL Server Management Studio(SSMS)連接數(shù)據(jù)庫(kù)的圖文方法,需要的朋友可以參考下2020-02-02Sql檢驗(yàn)數(shù)據(jù)庫(kù)中各個(gè)表的數(shù)據(jù)量
本文主要介紹了Sql檢驗(yàn)數(shù)據(jù)庫(kù)中各個(gè)表的數(shù)據(jù)量,這樣的查詢有助于評(píng)估每個(gè)表的數(shù)據(jù)量,從而更好地進(jìn)行數(shù)據(jù)庫(kù)性能優(yōu)化,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12SQL server查看各表的索引(sql語(yǔ)句大全)
使用Sql語(yǔ)句查看 SQL Server 數(shù)據(jù)庫(kù)中的索引,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-12-12sqlserver 因?yàn)檫x定的用戶擁有對(duì)象,所以無法除去該用戶的解決方法
這篇文章主要介紹了sqlserver 因?yàn)檫x定的用戶擁有對(duì)象,所以無法除去該用戶,因?yàn)槭歉郊訑?shù)據(jù)庫(kù)選擇了與源服務(wù)器一樣的用戶導(dǎo)致2016-04-04H2 數(shù)據(jù)庫(kù)導(dǎo)入CSV文件實(shí)現(xiàn)原理簡(jiǎn)析
在開發(fā)應(yīng)用中經(jīng)常會(huì)碰到一些數(shù)據(jù)庫(kù)方面的問題,例如:csv文件導(dǎo)入數(shù)據(jù)庫(kù),本文將以此問題進(jìn)行深入介紹,需要的朋友可以參考下2012-11-11SQL Server數(shù)據(jù)庫(kù)附加失敗的解決辦法
這篇文章主要為大家詳細(xì)介紹了SQL Server數(shù)據(jù)庫(kù)附加失敗,錯(cuò)誤3415、錯(cuò)誤5120的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03SQL Server 批量插入數(shù)據(jù)的完美解決方案
這篇文章主要介紹了SQL Server 批量插入數(shù)據(jù)的完美解決方案,需要的朋友可以參考下2020-12-12sqlserver 禁用觸發(fā)器和啟用觸發(fā)器的語(yǔ)句
sqlserver 禁用觸發(fā)器和啟用觸發(fā)器的語(yǔ)句,有需要的朋友可以試試。2009-09-09