最新国产好看的视频,伊人天堂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類型。

由于開(kāi)發(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)迫癥的我最終希望的寫(xiě)法是這樣的:

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

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

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

開(kāi)發(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)文章

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

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

    這篇文章主要給大家介紹了關(guān)于java定位死鎖的三種方法,分別是通過(guò)jstack定位死鎖信息、通過(guò)Arthas工具定位死鎖以及通過(guò) 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)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)
    2021-10-10
  • SpringBoot3使用Jasypt實(shí)現(xiàn)配置文件信息加密的方法

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

    對(duì)于一些單體項(xiàng)目而言,在沒(méi)有使用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ī)?lái)一篇淺談java中的路徑表示。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    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ù),文中通過(guò)示例代碼介紹的非常詳細(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
  • 怎樣通過(guò)反射獲取非靜態(tài)內(nèi)部類實(shí)例

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

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

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

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

最新評(píng)論

曲阳县| 郧西县| 铜山县| 香河县| 襄汾县| 莆田市| 洪雅县| 阿巴嘎旗| 汕尾市| 施秉县| 大港区| 贺兰县| 清流县| 阳曲县| 翁牛特旗| 山阴县| 曲水县| 民乐县| 元氏县| 清水河县| 汉中市| 沙田区| 乌鲁木齐市| 石楼县| 新丰县| 霍州市| 乳源| 卓尼县| 平邑县| 兰西县| 买车| 西安市| 保康县| 高淳县| 湄潭县| 全州县| 法库县| 星子县| 汉沽区| 石柱| 乌海市|