久久一区二区三区精品-久久一区二区明星换脸-久久一区二区精品-久久一区不卡中文字幕-91精品国产爱久久久久久-91精品国产福利尤物免费

sql不為空怎么寫 因為一條SQL,我差

網(wǎng)絡(luò) 分享 時間: 收藏本文

sql不為空怎么寫 因為一條SQL,我差

sql空字符_sql不為空怎么寫_sql為空怎么寫

# 反常的 SQL 語句

我瞇開朦朧的雙眼,才發(fā)現(xiàn)剛才的發(fā)聲來源于我的組長莊哥,看到他在緊張的點開日志系統(tǒng)查看日志,我預(yù)感到有什么不妙的事情發(fā)生。

仔細一問才知道,原來就在我瞇眼的期間,線上數(shù)據(jù)庫服務(wù)器的 CPU 被打滿,同時觸發(fā)了生產(chǎn)數(shù)據(jù)庫只讀延遲的限定時間并且發(fā)出告警,而且告警的過程持續(xù)了半個小時。

這讓我倒吸了一口涼氣,因為我們組做的系統(tǒng)很多都用的是同一個數(shù)據(jù)庫服務(wù)器,日用戶活躍量有好幾十萬,如果服務(wù)器崩潰了將會使所有的系統(tǒng)服務(wù)都不可用。

于是我們趕緊通過 SQL 日志進行問題查找,最后排查出來是因為一張 SQL 的高量查詢沒有走索引導(dǎo)致。

日志列表顯示,這條 SQL 語句的掃描行數(shù)達到了上百萬,基本就是全表掃描的情況,而且半個小時的時間查詢了達上萬次,每條 SQL 查詢的耗時都在 以上。

我的天啊,難怪服務(wù)器會 CPU 打滿,這么一條耗時的 SQL 語句查詢量這么大,數(shù)據(jù)庫的資源當(dāng)然是直接就崩潰了。

這是當(dāng)時那條 SQL 的查詢情況:

sql空字符_sql為空怎么寫_sql不為空怎么寫

# 臨時處理

看了這條語句,我又倒吸一口涼氣,這不就是我寫的系統(tǒng)調(diào)用的 SQL 語句嗎?完了,這回逃不掉了,真是人在睡夢里,鍋從天上來。

sql空字符_sql不為空怎么寫_sql為空怎么寫

當(dāng)然,因為是我自己寫的 SQL,所以我一看就知道這條語句是有問題的。

根據(jù)我的代碼處理,這條 SQL 的調(diào)用還少了個重要的參數(shù) ,這個參數(shù)沒有傳的話是不應(yīng)該走這條 SQL 查詢的。

在我的設(shè)計里,該參數(shù)是數(shù)據(jù)表里一個聯(lián)合索引的最左側(cè)字段,如果該字段沒有傳值的話,那么索引就不會生效了。

KEY?`idx_userfruitid_type`?(`user_fruit_id`,`task_type`,`receive_start_time`,`receive_end_time`)?USING?BTREE

雖然定位到了 SQL 語句,但是線上的問題刻不容緩,總不可能找出 Bug 改完再上線吧。

所以,我們只能做了一個臨時處理,就是在原來的表上多加了一個聯(lián)合索引,其實就是去掉了 字段,讓這些高量的查詢都能走新的索引。

就像下面這樣:

KEY?`idx_task_type_receive_start_time`?(`task_type`,`receive_start_time`,`receive_end_time`,`created_time`)?USING?BTREE

加上索引后,SQL 的掃描行數(shù)就大幅度的降低了,重啟實例后就又能正常運行了。

# 最左匹配原則

那么為什么最左側(cè)的字段沒傳索引就不生效了,這是因為 的聯(lián)合索引是基于“最左匹配原則”匹配的。

我們都知道,索引的底層是 B+ 樹結(jié)構(gòu),聯(lián)合索引的結(jié)構(gòu)也是 B+ 樹,只不過鍵值數(shù)量不是一個,而是多個,構(gòu)建一顆 B+ 樹只能根據(jù)一個值來構(gòu)建,因此數(shù)據(jù)庫依據(jù)聯(lián)合索引最左的字段來構(gòu)建 B+ 樹。

例如我們用兩個字段(name,age)這個聯(lián)合索引來分析:

sql空字符_sql不為空怎么寫_sql為空怎么寫

圖片來源于林曉斌老師的《 實戰(zhàn) 45 講》課程

當(dāng)我們在 條件中查找 name 為“張三”的所有記錄的時候,可以快速定位到 ID4,并且查出所有包含“張三”的記錄。

而如果要查找“張三,10”這一條特定的數(shù)據(jù),就可以用 name = "張三" and age = 10獲取。

因為聯(lián)合索引的鍵值對是兩個,所以只要前面的 name 確定的情況下就可以進一步定位到具體的 age 記錄。

但是如果你的查詢條件只有 age 的話,那么索引就不會生效,因為沒有匹配最左邊的字段,后面所有的索引字段都不會生效。

# 找出 Bug

雖然臨時做了處理,但問題并不算解決,很明顯是系統(tǒng)出現(xiàn)了 Bug 才會有走這樣的查詢條件。

因為是我自己寫的代碼,所以知道是哪條 SQL 后我就馬上定位到了代碼里的具體方法,后來才發(fā)現(xiàn)是因為我對 字段的判空處理不生效所致。

因為該字段是從調(diào)用方傳過來的,所以我在方法參數(shù)里對該字段做了非空限制的注解,也就是 包下的 @:

public class GardenUserTaskListReq implements Serializable {
private static final long serialVersionUID = -9161295541482297498L;
@ApiModelProperty(notes = "水果id") @NotNull(message = "水果id不能為空") private Long userFruitId; /**以下省略*/ .....................}

雖然加上該注解來做非空校驗,但我卻沒有在參數(shù)加上另一個注解 @。

該注解如果沒加上的話,那么調(diào)用 包下的校驗規(guī)則就都不生效,正確的寫法是在 層方法的參數(shù)前面加上注解:

sql為空怎么寫_sql空字符_sql不為空怎么寫

除此之外,因為 這個字段是另一張表的主鍵,我在代碼里也沒有對這張表是否存在這個 id 做查詢判斷。

這樣一來,無論調(diào)用方傳什么值過來都會直接觸發(fā) SQL 查詢,并且在不跑索引的情況下直接走全表掃描。

sql空字符_sql不為空怎么寫_sql為空怎么寫

不得不說,這真是個低級錯誤,說真的,我對這個原因真是感到嘀笑皆非,再怎么說也工作幾年了,怎么還犯一些新手級別的錯誤呢,這臉打得真是讓我相當(dāng)慚愧。

# 總結(jié)

雖然是低級錯誤,但造成的后果也算挺嚴重了,這次事件也讓我更加的警醒,在以后的開發(fā)工作中必須要遵守該有的原則,大概有這么幾點:

千里之堤毀于蟻穴,有時一個小 Bug 很容易就引發(fā)整個系統(tǒng)的崩盤,這一次的問題也讓我更加深刻的認識到了 代碼的重要性,不管業(yè)務(wù)開發(fā)的工作量有多麻煩,這一步操作絕對不能忽視。

相關(guān)專題 索引sql數(shù)據(jù)庫
周易 易經(jīng) 代理招生 二手車 網(wǎng)絡(luò)營銷 旅游攻略 非物質(zhì)文化遺產(chǎn) 查字典 精雕圖 戲曲下載 抖音代運營 易學(xué)網(wǎng) 互聯(lián)網(wǎng)資訊 成語 詩詞 工商注冊 抖音帶貨 云南旅游網(wǎng) 網(wǎng)絡(luò)游戲 代理記賬 短視頻運營 在線題庫 國學(xué)網(wǎng) 抖音運營 雕龍客 雕塑 奇石 散文 常用文書 河北生活網(wǎng) 好書推薦 游戲攻略 心理測試 石家莊人才網(wǎng) 考研真題 漢語知識 心理咨詢 手游安卓版下載 興趣愛好 網(wǎng)絡(luò)知識 十大品牌排行榜 商標(biāo)交易 單機游戲下載 短視頻代運營 寶寶起名 范文網(wǎng) 電商設(shè)計 免費發(fā)布信息 服裝服飾 律師咨詢 搜救犬 Chat GPT中文版 經(jīng)典范文 優(yōu)質(zhì)范文 工作總結(jié) 二手車估價 實用范文 石家莊點痣 養(yǎng)花 名酒回收 石家莊代理記賬 女士發(fā)型 搜搜作文 鋼琴入門指法教程 詞典 讀后感 玄機派 企業(yè)服務(wù) 法律咨詢 chatGPT國內(nèi)版 chatGPT官網(wǎng) 勵志名言 文玩 語料庫 游戲推薦 男士發(fā)型 高考作文 PS修圖 兒童文學(xué) 工作計劃 舟舟培訓(xùn) IT教程 手機游戲推薦排行榜 暖通,電地暖, 女性健康 苗木供應(yīng) ps素材庫 短視頻培訓(xùn) 優(yōu)秀個人博客 包裝網(wǎng) 創(chuàng)業(yè)賺錢 養(yǎng)生 民間借貸律師 綠色軟件 安卓手機游戲 手機軟件下載 手機游戲下載 單機游戲大全 石家莊論壇 網(wǎng)賺 職業(yè)培訓(xùn) 資格考試 成語大全 英語培訓(xùn) 藝術(shù)培訓(xùn) 少兒培訓(xùn) 苗木網(wǎng) 雕塑網(wǎng) 好玩的手機游戲推薦 漢語詞典 中國機械網(wǎng) 美文欣賞 紅樓夢 道德經(jīng) 標(biāo)準(zhǔn)件 電地暖 鮮花 書包網(wǎng) 英語培訓(xùn)機構(gòu) 電商運營
主站蜘蛛池模板: 国产成人18 | 乱人伦中文视频在线观看免费 | 日本免费一区二区三区三州 | 91久久亚洲精品一区二区 | 久久午夜网 | 9999久久| 欧美成人性做爰网站免费 | 欧美视频在线观看一区二区 | 成人网18免费网站 | 国产一国产a一级毛片 | 美女视频免费黄的 | 久久熟 | 韩国good三级在线观看久 | 国产成人av性色在线影院 | 国产成人亚洲综合 | 99视频在线国产 | 日韩中文字幕在线观看视频 | 欧美一级特黄aa大片 | 九九99香蕉在线视频网站 | 国产日韩精品一区二区三区 | 99久久成人国产精品免费 | 亚洲另类视频 | 米奇久久| 成年人网站在线观看视频 | 国产午夜精品不卡视频 | 毛片日韩| 国产农村乱 | 一级片视频在线 | 精品国产一区二区三区四区vr | 德国女人一级毛片免费 | 亚洲综合日本 | 亚欧成人毛片一区二区三区四区 | 一区二三区国产 | www.欧美成 | 国产一级生活片 | 亚洲毛片免费视频 | 免费一级毛片在线播放不收费 | 长腿美女被啪的欲仙欲死视频 | 中文字幕亚洲另类天堂 | 亚洲日韩中文字幕在线播放 | 一级黄色香蕉视频 |