0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL告別count改用LIMIT 1

數(shù)據(jù)分析與開發(fā) ? 來源:今日頭條 ? 作者:程序猿囧途 ? 2021-07-26 10:57 ? 次閱讀

根據(jù)某一條件從數(shù)據(jù)庫表中查詢 『有』與『沒有』,只有兩種狀態(tài),那為什么在寫SQL的時候,還要SELECT count(*) 呢?無論是剛?cè)氲赖?a href="http://ttokpm.com/v/tag/1730/" target="_blank">程序員新星,還是精湛沙場多年的程序員老白,都是一如既往的count

目前多數(shù)人的寫法

多次REVIEW代碼時,發(fā)現(xiàn)如現(xiàn)現(xiàn)象:業(yè)務(wù)代碼中,需要根據(jù)一個或多個條件,查詢是否存在記錄,不關(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)存在時,執(zhí)行這里的代碼

} else {

//當(dāng)不存在時,執(zhí)行這里的代碼

}

是不是感覺很OK,沒有什么問題

優(yōu)化方案

推薦寫法如下:

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1

##### Java寫法:

Integer exist = xxDao.existXxxxByXxx(params);

if ( exist != NULL ) {

//當(dāng)存在時,執(zhí)行這里的代碼

} else {

//當(dāng)不存在時,執(zhí)行這里的代碼

}

SQL不再使用count,而是改用LIMIT 1,讓數(shù)據(jù)庫查詢時遇到一條就返回,不要再繼續(xù)查找還有多少條了業(yè)務(wù)代碼中直接判斷是否非空即可

總結(jié)

根據(jù)查詢條件查出來的條數(shù)越多,性能提升的越明顯,在某些情況下,還可以減少聯(lián)合索引的創(chuàng)建。

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    751

    瀏覽量

    43905

原文標(biāo)題:SQL 查找是否"存在",別再 count 了!

文章出處:【微信號:DBDevs,微信公眾號:數(shù)據(jù)分析與開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    什么是 Flink SQL 解決不了的問題?

    簡介 在實(shí)時數(shù)據(jù)開發(fā)過程中,大家經(jīng)常會用 Flink SQL 或者 Flink DataStream API 來做數(shù)據(jù)加工。通常情況下選用2者都能加工出想要的數(shù)據(jù),但是總會有 Flink SQL
    的頭像 發(fā)表于 07-09 20:50 ?166次閱讀

    請問stm32cubeide怎么取ImageER_IROM1Limit?

    MDK的時候取image大小是用\"ImageER_IROM1Limit\"這樣的,但是stm32cubeide用不了,大家有什么辦法嗎?謝謝
    發(fā)表于 05-29 06:03

    SQL全外連接剖析

    SQL中的全外連接是什么? 在SQL中,F(xiàn)ULLOUTERJOIN組合左外連接和右外連接的結(jié)果,并返回連接子句兩側(cè)表中的所有(匹配或不匹配)行。接下面sojson給大家詳細(xì)講解。 ? 圖解:SQL
    的頭像 發(fā)表于 03-19 18:28 ?1759次閱讀
    <b class='flag-5'>SQL</b>全外連接剖析

    Oracle如何執(zhí)行sql腳本文件

    Oracle是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可用于存儲、查詢和管理大量的數(shù)據(jù)。在Oracle中,可以通過執(zhí)行SQL腳本文件來一次性地執(zhí)行多個SQL語句或者批量處理數(shù)據(jù)。在下面的文章中,我將詳細(xì)介紹
    的頭像 發(fā)表于 12-06 10:51 ?5582次閱讀

    oracle執(zhí)行sql查詢語句的步驟是什么

    Oracle數(shù)據(jù)庫是一種常用的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),具有強(qiáng)大的SQL查詢功能。Oracle執(zhí)行SQL查詢語句的步驟包括編寫SQL語句、解析SQL語句、生成執(zhí)行計(jì)劃、執(zhí)行
    的頭像 發(fā)表于 12-06 10:49 ?781次閱讀

    oracle sql 定義變量并賦值

    在Oracle SQL中,變量是用來存儲數(shù)據(jù)值的標(biāo)識符。通過定義和使用變量,我們可以在SQL語句中使用它們來存儲和處理數(shù)據(jù),從而實(shí)現(xiàn)更靈活和動態(tài)的查詢和操作。 在Oracle SQL中,定義變量并
    的頭像 發(fā)表于 12-06 10:46 ?2112次閱讀

    oracle的limit語句

    Oracle數(shù)據(jù)庫中并沒有像MySQL或其他數(shù)據(jù)庫那樣直接使用"LIMIT"關(guān)鍵字來限制查詢結(jié)果的行數(shù)。在Oracle中,可以使用不同的方法來實(shí)現(xiàn)類似的功能。下面將詳細(xì)介紹這些方法。 1
    的頭像 發(fā)表于 12-06 10:03 ?2394次閱讀

    SQL語句大全實(shí)例

    SQL 1:從 idc_evaluating 數(shù)據(jù)庫的 ns_active_ip 表中查詢省份代碼為 110000 的所有行數(shù)據(jù)
    的頭像 發(fā)表于 11-30 11:33 ?443次閱讀

    mysql和sql server區(qū)別

    MySQL和SQL Server是兩種常見的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),用于存儲和管理數(shù)據(jù)庫。雖然它們都支持SQL語言,但在其他方面存在一些顯著的區(qū)別。以下是MySQL和SQL Server
    的頭像 發(fā)表于 11-21 11:07 ?1258次閱讀

    linux修改用戶名的命令

    在Linux中修改用戶名可以使用用戶管理命令usermod來執(zhí)行,下面將詳細(xì)介紹如何修改Linux系統(tǒng)中的用戶名。 用戶名修改概述: 在Linux系統(tǒng)中,用戶名是用于識別用戶的唯一標(biāo)識符。它們通常
    的頭像 發(fā)表于 11-17 09:42 ?2123次閱讀

    深入分析慢SQL的排查、解決思路

    出于一些歷史原因有的SQL查詢可能非常復(fù)雜,需要同時關(guān)聯(lián)非常多的表,使用一些復(fù)雜的函數(shù)、子查詢,這樣的SQL在項(xiàng)目初期由于數(shù)據(jù)量比較少,不會對數(shù)據(jù)庫造成較大的壓力,但是隨著時間的積累以及業(yè)務(wù)的發(fā)展,這些SQL慢慢就會轉(zhuǎn)變?yōu)槁?/div>
    的頭像 發(fā)表于 10-31 10:29 ?1489次閱讀
    深入分析慢<b class='flag-5'>SQL</b>的排查、解決思路

    什么是SQL注入?Java項(xiàng)目防止SQL注入方式

    Java項(xiàng)目防止SQL注入方式 這里總結(jié)4種: PreparedStatement防止SQL注入 mybatis中#{}防止SQL注入 對請求參數(shù)的敏感詞匯進(jìn)行過濾 nginx反向代理防止
    發(fā)表于 10-16 14:26 ?452次閱讀

    sql是什么意思網(wǎng)絡(luò)用語

    、檢索和刪除數(shù)據(jù),以及管理數(shù)據(jù)庫結(jié)構(gòu)。廣泛用于訪問和操作關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)的標(biāo)準(zhǔn)語言。 sql的主要用途包括: 1、查詢數(shù)據(jù):通過sql語句,用戶可以從數(shù)據(jù)庫中檢索數(shù)據(jù),以滿足特定的查詢需求。這是
    的頭像 發(fā)表于 10-13 17:31 ?3112次閱讀

    數(shù)據(jù)庫SQL的優(yōu)化

    數(shù)據(jù)庫執(zhí)行SQL都會先進(jìn)行語義解析,然后將SQL分成一步一步可執(zhí)行的計(jì)劃,然后逐步執(zhí)行。通過分析執(zhí)行計(jì)劃,我們可以清晰的看到數(shù)據(jù)庫執(zhí)行的操作,這對于數(shù)據(jù)庫SQL的優(yōu)化具有重大意義。 1
    的頭像 發(fā)表于 10-09 15:43 ?945次閱讀
    數(shù)據(jù)庫<b class='flag-5'>SQL</b>的優(yōu)化

    sql注入漏洞解決方法有哪些?

    什么是sql注入?SQL注入(SQLi)是一種執(zhí)行惡意SQL語句的注入攻擊。攻擊者可能會利用 SQL 注入漏洞來繞過應(yīng)用程序安全措施。典型的SQLi攻擊會通過添加、刪除和修改數(shù)據(jù)庫中的
    的頭像 發(fā)表于 10-07 17:29 ?4548次閱讀
    <b class='flag-5'>sql</b>注入漏洞解決方法有哪些?