where 1=1 是什么意思肥缔?莲兢??

where 1=1

先來看一段代碼

<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer"> 
  select count(id) 
  from t_book t 
  where 1=1
  <if test="title !=null and title !='' "> 
    AND title = #{title} 
  </if> 
  <if test="author !=null and author !='' "> 
    AND author = #{author}
  </if> 
</select>

上面的代碼很熟悉,就是查詢符合條件的總條數(shù)改艇。在mybatis中常用到if標(biāo)簽判斷where子句后的條件收班,為防止首字段為空導(dǎo)致sql報(bào)錯(cuò)。

沒錯(cuò) 谒兄,當(dāng)遇到多個(gè)查詢條件摔桦,使用where 1=1可以很方便的解決我們條件為空的問題,那么這么寫 有什么問題嗎 承疲?

網(wǎng)上有很多人說邻耕,這樣會引發(fā)性能問題,可能會讓索引失效燕鸽,那么我們今天來實(shí)測一下兄世,會不會不走索引

實(shí)測

title字段已經(jīng)加上索引,我們通過EXPLAIN看下

EXPLAIN SELECT * FROM t_book WHERE title = '且在人間';
EXPLAIN SELECT * FROM t_book WHERE 1=1 AND title = '且在人間';

對比上面兩種我們會發(fā)現(xiàn) 可以看到possible_keys(可能使用的索引) 和 key(實(shí)際使用的索引)都使用到了索引進(jìn)行檢索啊研。

結(jié)論

where 1=1 也會走索引御滩,不影響查詢效率,我們寫的sql指令會被mysql 進(jìn)行解析優(yōu)化成自己的處理指令党远,在這個(gè)過程中1 = 1這類無意義的條件將會被優(yōu)化艾恼。使用explain EXTENDED sql 進(jìn)行校對,發(fā)現(xiàn)確實(shí)where1=1這類條件會被mysql的優(yōu)化器所優(yōu)化掉麸锉。

那么我們在mybatis當(dāng)中可以改變一下寫法,因?yàn)楫吘筸ysql優(yōu)化器也是需要時(shí)間的舆声,雖然是走了索引花沉,但是當(dāng)數(shù)據(jù)量很大時(shí),還是會有影響的媳握,所以我們建議代碼這樣寫:

<select id="queryBookInfo" parameterType="com.ths.platform.entity.BookInfo" resultType="java.lang.Integer"> 
  select count(*) 
  from t_book t
  <where>
    <if test="title !=null and title !='' "> 
      title = #{title} 
    </if>
    <if test="author !=null and author !='' ">
      AND author = #{author}
    </if>
  </where>
</select>

我們用where標(biāo)簽代替碱屁。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛾找,隨后出現(xiàn)的幾起案子娩脾,更是在濱河造成了極大的恐慌,老刑警劉巖打毛,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柿赊,死亡現(xiàn)場離奇詭異,居然都是意外死亡幻枉,警方通過查閱死者的電腦和手機(jī)碰声,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熬甫,“玉大人胰挑,你說我怎么就攤上這事。” “怎么了瞻颂?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵豺谈,是天一觀的道長。 經(jīng)常有香客問我贡这,道長茬末,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任藕坯,我火速辦了婚禮团南,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炼彪。我一直安慰自己吐根,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布辐马。 她就那樣靜靜地躺著拷橘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喜爷。 梳的紋絲不亂的頭發(fā)上冗疮,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音檩帐,去河邊找鬼术幔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛湃密,可吹牛的內(nèi)容都是我干的诅挑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼泛源,長吁一口氣:“原來是場噩夢啊……” “哼拔妥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起达箍,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤没龙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后缎玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硬纤,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年赃磨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咬摇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煞躬,死狀恐怖肛鹏,靈堂內(nèi)的尸體忽然破棺而出逸邦,到底是詐尸還是另有隱情,我是刑警寧澤在扰,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布缕减,位于F島的核電站,受9級特大地震影響芒珠,放射性物質(zhì)發(fā)生泄漏桥狡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一皱卓、第九天 我趴在偏房一處隱蔽的房頂上張望裹芝。 院中可真熱鬧,春花似錦娜汁、人聲如沸嫂易。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怜械。三九已至,卻和暖如春傅事,著一層夾襖步出監(jiān)牢的瞬間缕允,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工蹭越, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留障本,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓响鹃,卻偏偏與公主長得像驾霜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子茴迁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容