亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis自動(dòng)生成Where語(yǔ)句

 更新時(shí)間:2016年08月11日 09:41:08   作者:萬(wàn)劍齊發(fā)  
這篇文章主要介紹了MyBatis自動(dòng)生成Where語(yǔ)句的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

最近監(jiān)控到類似這樣一個(gè)慢查詢:

select delete_flag,delete_time
from D_OrderInfo 
   WHERE ( OrderId is not null and
          OrderId = N'xxxx') 

D_OrderInfo表上有一個(gè)OrderId的索引,但OrderId字段是Varchar類型。

由于開發(fā)框架MyBatis自動(dòng)生成Where條件不會(huì)指定參數(shù)類型,字符串類型的參數(shù)到了SQLServer里就自動(dòng)成了NVARCHAR(4000)類型了,坑人的是,不指定參數(shù)類型也就罷了,還自動(dòng)加了個(gè)OrderId Is NOT NULL這樣一個(gè)非SARG的條件,執(zhí)行計(jì)劃成了這樣:



---------------------------------------------------------------------------------------------
如果沒(méi)有OrderId IS NOT NULL這個(gè)條件,執(zhí)行計(jì)劃會(huì)是這樣的:



由于參數(shù)類型Nvarchar比索引字段類型varchar優(yōu)先級(jí)要高,不能直接轉(zhuǎn)換,但SQLServer優(yōu)化器最終還是將他轉(zhuǎn)成了一個(gè)范圍值,最終的等號(hào)查詢也變成了類似一個(gè)小范圍查詢。

可以從Index Seek這一步的詳細(xì)信息可以看出:



------------------------------------------------------------------------

如果參數(shù)類型匹配,那么執(zhí)行計(jì)劃會(huì)是想象中的那樣(雖然沒(méi)有包含到,還是有Key Lookup):



當(dāng)然,有點(diǎn)小小強(qiáng)迫癥的我最終希望的寫法是這樣的:

select delete_flag,delete_time
from D_OrderInfo 
   WHERE OrderId = 'xxxx'

執(zhí)行計(jì)劃當(dāng)然也會(huì)是這樣的:

只是,只是不知道最終開發(fā)大神能改成什么樣......

開發(fā)大神的解決方案:連接字符串中配置:

sendStringParametersAsUnicode=false

后記:

默認(rèn)情況下,Java 中的字符數(shù)據(jù)作為 Unicode 進(jìn)行處理;Java String 對(duì)象表示 Unicode 字符數(shù)據(jù)。在 JDBC 驅(qū)動(dòng)程序中,唯一可以不遵守此規(guī)則的是 ASCII 流 getter 和 setter 方法,這屬于比較特殊的情況,因?yàn)檫@些方法使用的字節(jié)流帶有單個(gè)已知代碼頁(yè) (ASCII) 的隱式假定。

此外,JDBC 驅(qū)動(dòng)程序提供了 sendStringParametersAsUnicode 連接字符串屬性。此屬性可用于指定作為 ASCII 而不是 Unicode 來(lái)發(fā)送的字符數(shù)據(jù)的預(yù)定義參數(shù)。

作為性能方面的一項(xiàng)增強(qiáng)功能,可以通過(guò)設(shè)置 sendStringParametersAsUnicode 連接字符串屬性將 String 參數(shù)以非 Unicode 格式傳遞到 SQL Server。sendStringParametersAsUnicode 的默認(rèn)設(shè)置為“true”,這意味著 String 參數(shù)將作為 Unicode 進(jìn)行發(fā)送。

如果 sendStringParametersAsUnicode 設(shè)置為“false”,則連接上的所有 String 參數(shù)將使用數(shù)據(jù)庫(kù)默認(rèn)的排序規(guī)則發(fā)送到服務(wù)器。

參考:

http://d.hatena.ne.jp/gnarl/20110706/1309945379

https://technet.microsoft.com/zh-cn/library/ms378857(SQL.90).aspx

https://technet.microsoft.com/zh-cn/library/ms378988(v=sql.90).aspx

相關(guān)文章

  • JavaScript的基本類型值-String類型

    JavaScript的基本類型值-String類型

    String類型用于表示由零或多個(gè)16位Unicode字符組成的字符序列,即字符串。在JavaScript中沒(méi)有單個(gè)的字符型,都是字符串。這篇文章主要介紹了JavaScript的基本類型值String類型,需要的朋友可以參考下
    2017-02-02
  • 淺析Java常用API(Scanner,Random)匿名對(duì)象

    淺析Java常用API(Scanner,Random)匿名對(duì)象

    這篇文章主要介紹了Java常用API(Scanner,Random)匿名對(duì)象,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Spring入門實(shí)戰(zhàn)之Profile詳解

    Spring入門實(shí)戰(zhàn)之Profile詳解

    什么是spring profile?簡(jiǎn)單講profile就是一組配置,不同profile提供不同組合的配置,程序運(yùn)行時(shí)可以選擇使用哪些profile來(lái)適應(yīng)環(huán)境。下面這篇文章主要介紹了Spring中Profile實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-02-02
  • springboot中的starter使用解析

    springboot中的starter使用解析

    這篇文章主要介紹了springboot中的starter使用解析,引入了starter依賴之后,基礎(chǔ)組件就可以像在spring的bean一樣在項(xiàng)目中使用,那其實(shí)只要找到在哪里加載了這些bean就明白了,需要的朋友可以參考下
    2023-10-10
  • Jmeter設(shè)置全局變量token過(guò)程圖解

    Jmeter設(shè)置全局變量token過(guò)程圖解

    這篇文章主要介紹了Jmeter設(shè)置全局變量token過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 簡(jiǎn)單了解JavaBean作用及常用操作

    簡(jiǎn)單了解JavaBean作用及常用操作

    這篇文章主要介紹了簡(jiǎn)單了解JavaBean作用及常用操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Spring Cloud超詳細(xì)i講解Feign自定義配置與使用

    Spring Cloud超詳細(xì)i講解Feign自定義配置與使用

    這篇文章主要介紹了SpringCloud Feign自定義配置與使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 關(guān)于java方法區(qū)詳解

    關(guān)于java方法區(qū)詳解

    這篇文章主要介紹了關(guān)于java方法區(qū)的使用解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • java自帶的MessageDigest實(shí)現(xiàn)文本的md5加密算法

    java自帶的MessageDigest實(shí)現(xiàn)文本的md5加密算法

    這篇文章主要介紹了java自帶的MessageDigest實(shí)現(xiàn)文本的md5加密算法,需要的朋友可以參考下
    2015-12-12
  • 老生常談Java動(dòng)態(tài)編譯(必看篇)

    老生常談Java動(dòng)態(tài)編譯(必看篇)

    下面小編就為大家?guī)?lái)一篇老生常談Java動(dòng)態(tài)編譯(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論