最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ì)劃成了這樣:



---------------------------------------------------------------------------------------------
如果沒有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ì)是想象中的那樣(雖然沒有包含到,還是有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 來發(fā)送的字符數(shù)據(jù)的預(yù)定義參數(shù)。

作為性能方面的一項(xiàng)增強(qiáng)功能,可以通過設(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)文章

  • java定位死鎖的三種方法(jstack、Arthas和Jvisualvm)

    java定位死鎖的三種方法(jstack、Arthas和Jvisualvm)

    這篇文章主要給大家介紹了關(guān)于java定位死鎖的三種方法,分別是通過jstack定位死鎖信息、通過Arthas工具定位死鎖以及通過 Jvisualvm 定位死鎖,文中還介紹了死鎖的預(yù)防方法,需要的朋友可以參考下
    2021-09-09
  • Java SpringMVC攔截器與異常處理機(jī)制詳解分析

    Java SpringMVC攔截器與異常處理機(jī)制詳解分析

    SpringMVC是一種基于Java,實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦。基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開發(fā)
    2021-10-10
  • SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法

    SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法

    對(duì)于一些單體項(xiàng)目而言,在沒有使用SpringCloud的情況下,配置文件中包含著大量的敏感信息,如果這些信息泄露出去將會(huì)對(duì)企業(yè)的資產(chǎn)產(chǎn)生重大威脅,因此,對(duì)配置文件中的敏感信息加密是一件極其必要的事,所以本文介紹了SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法
    2024-07-07
  • Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)

    Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)

    Java運(yùn)行時(shí)多態(tài)性的實(shí)現(xiàn)...
    2006-12-12
  • 淺談java中的路徑表示

    淺談java中的路徑表示

    下面小編就為大家?guī)硪黄獪\談java中的路徑表示。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù)

    Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù)

    這篇文章主要介紹了Java ArrayList如何實(shí)現(xiàn)生成不重復(fù)隨機(jī)數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    在本文中,我們介紹了 Spring Boot 中的 @PutMapping 注解,它可以將 HTTP PUT 請(qǐng)求映射到指定的處理方法上,我們還介紹了 @PutMapping 注解的原理以及如何在 Spring Boot 中使用它,感興趣的朋友跟隨小編一起看看吧
    2023-12-12
  • Java正則表達(dá)式循環(huán)匹配字符串方式

    Java正則表達(dá)式循環(huán)匹配字符串方式

    這篇文章主要介紹了Java正則表達(dá)式循環(huán)匹配字符串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例

    怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例

    這篇文章主要介紹了怎樣通過反射獲取非靜態(tài)內(nèi)部類實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • SpringBoot使用@Cacheable時(shí)設(shè)置部分緩存的過期時(shí)間方式

    SpringBoot使用@Cacheable時(shí)設(shè)置部分緩存的過期時(shí)間方式

    這篇文章主要介紹了SpringBoot使用@Cacheable時(shí)設(shè)置部分緩存的過期時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論

永登县| 楚雄市| 墨竹工卡县| 天峻县| 文昌市| 邳州市| 高碑店市| 永吉县| 大荔县| 淮北市| 天气| 北宁市| 台江县| 安吉县| 大城县| 韶山市| 睢宁县| 高密市| 宣汉县| 新河县| 栾川县| 安顺市| 荃湾区| 城步| 铁岭市| 龙门县| 合山市| 白朗县| 集安市| 扬州市| 崇左市| 小金县| 浠水县| 光山县| 华安县| 福鼎市| 瑞昌市| 衢州市| 海口市| 蚌埠市| 南陵县|