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

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

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

SQL告別count改用LIMIT 1

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

根據(jù)某一條件從數(shù)據(jù)庫(kù)表中查詢 『有』與『沒(méi)有』,只有兩種狀態(tài),那為什么在寫SQL的時(shí)候,還要SELECT count(*) 呢?無(wú)論是剛?cè)氲赖?a href="http://srfitnesspt.com/v/tag/1730/" target="_blank">程序員新星,還是精湛沙場(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í)行這里的代碼

}

是不是感覺(jué)很OK,沒(méi)有什么問(wèn)題

優(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)存在時(shí),執(zhí)行這里的代碼

} else {

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

}

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

總結(jié)

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

編輯:jq

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

    關(guān)注

    1

    文章

    751

    瀏覽量

    43996

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    大數(shù)據(jù)從業(yè)者必知必會(huì)的Hive SQL調(diào)優(yōu)技巧

    不盡人意。本文針對(duì)Hive SQL的性能優(yōu)化進(jìn)行深入研究,提出了一系列可行的調(diào)優(yōu)方案,并給出了相應(yīng)的優(yōu)化案例和優(yōu)化前后的SQL代碼。通過(guò)合理的優(yōu)化策略和技巧,能夠顯著提升Hive SQL的執(zhí)行效率和響應(yīng)速度。 關(guān)鍵詞: Hive
    的頭像 發(fā)表于 09-24 13:30 ?118次閱讀

    什么是 Flink SQL 解決不了的問(wèn)題?

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

    請(qǐng)問(wèn)stm32cubeide怎么取ImageER_IROM1Limit?

    MDK的時(shí)候取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 ?1983次閱讀
    <b class='flag-5'>SQL</b>全外連接剖析

    為什么需要監(jiān)控SQL服務(wù)器?

    如今,大多數(shù)桌面、移動(dòng)、云、物聯(lián)網(wǎng)和其他應(yīng)用程序都嚴(yán)重依賴數(shù)據(jù)庫(kù)。為了支持這些,SQL Server部署、容量和工作負(fù)載不斷增長(zhǎng)。當(dāng)這種情況發(fā)生時(shí),企業(yè)需要確保數(shù)據(jù)系統(tǒng)滿足所需的性能要求。 SQL
    的頭像 發(fā)表于 02-19 17:19 ?407次閱讀

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

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

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

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

    oracle sql 定義變量并賦值

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

    oracle的limit語(yǔ)句

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

    SQL語(yǔ)句大全實(shí)例

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

    sql where條件的執(zhí)行順序

    SQL語(yǔ)句中的WHERE條件是用來(lái)篩選數(shù)據(jù)的,它決定了哪些數(shù)據(jù)會(huì)被返回給用戶。WHERE條件的執(zhí)行順序是影響SQL語(yǔ)句性能的一個(gè)重要因素,正確地理解和優(yōu)化WHERE條件的執(zhí)行順序可以提高查詢效率
    的頭像 發(fā)表于 11-23 11:31 ?2035次閱讀

    mysql和sql server區(qū)別

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

    navicat導(dǎo)入SQL文件不成功

    Navicat是一款功能強(qiáng)大的數(shù)據(jù)庫(kù)管理工具,可以幫助用戶輕松管理和操作數(shù)據(jù)庫(kù)。然而,有時(shí)用戶在導(dǎo)入SQL文件時(shí)可能會(huì)遇到問(wèn)題,導(dǎo)致導(dǎo)入不成功。本文將詳細(xì)介紹導(dǎo)入SQL文件不成功的原因和解
    的頭像 發(fā)表于 11-21 11:01 ?6032次閱讀

    linux修改用戶名的命令

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

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

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