自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

針對(duì)Mapper文件的SQL優(yōu)化

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
PawSQL為了方便應(yīng)用開(kāi)發(fā)人員進(jìn)行SQL性能調(diào)優(yōu),提供了基于Mybatis的mapper文件創(chuàng)建SQL優(yōu)化任務(wù)的功能,讓?xiě)?yīng)用開(kāi)發(fā)人員在頁(yè)面上通過(guò)鼠標(biāo)操作,完成其應(yīng)用的SQL性能優(yōu)化。

簡(jiǎn)介

MyBatis是一款開(kāi)源的持久層框架,它封裝了JDBC操作數(shù)據(jù)庫(kù)時(shí)的常用API,并提供了ORM映射的功能,使得開(kāi)發(fā)者可以使用Java對(duì)象來(lái)操作數(shù)據(jù)庫(kù)。開(kāi)發(fā)者可以通過(guò)XML配置或注解方式自定義SQL語(yǔ)句和參數(shù)映射規(guī)則,從而使得應(yīng)用開(kāi)發(fā)人員無(wú)需過(guò)多的了解數(shù)據(jù)庫(kù),就可以開(kāi)發(fā)出功能完善應(yīng)用程序。

但是天下沒(méi)有免費(fèi)的午餐,使用MyBatis也使得應(yīng)用開(kāi)發(fā)人員進(jìn)行SQL調(diào)優(yōu)變得困難。通過(guò)MyBatis開(kāi)發(fā)的應(yīng)用程序,傳統(tǒng)方式下需要通過(guò)模擬應(yīng)用的接口調(diào)用、啟動(dòng)數(shù)據(jù)庫(kù)的SQL日志、獲取應(yīng)用的SQL查詢(xún)語(yǔ)句、對(duì)獲取的SQL進(jìn)行優(yōu)化,這讓整個(gè)SQL調(diào)優(yōu)的流程復(fù)雜且費(fèi)時(shí)。

PawSQL為了方便應(yīng)用開(kāi)發(fā)人員進(jìn)行SQL性能調(diào)優(yōu),提供了基于Mybatis的mapper文件創(chuàng)建SQL優(yōu)化任務(wù)的功能,讓?xiě)?yīng)用開(kāi)發(fā)人員在頁(yè)面上通過(guò)鼠標(biāo)操作,完成其應(yīng)用的SQL性能優(yōu)化。 

工作原理

Mapper文件

在 MyBatis 中,Mapper 文件是一種用于配置 SQL 語(yǔ)句和 SQL 操作的配置文件。

Mapper 文件通常包含四個(gè)主要部分:

  • 命名空間,用于指定對(duì)應(yīng)操作的實(shí)體類(lèi)或其接口類(lèi)的全路徑名。
  • SQL語(yǔ)句片段,可以通過(guò) select、insert、update、delete 等標(biāo)簽來(lái)定義不同的 SQL 語(yǔ)句。
  • 映射語(yǔ)句定義,可以通過(guò)映射語(yǔ)句來(lái)將操作的參數(shù)和返回值與上述 SQL 語(yǔ)句進(jìn)行綁定的方式。
  • 流程控制標(biāo)簽,如<if>、where、foreach等標(biāo)簽,根據(jù)不同的條件動(dòng)態(tài)生成SQL語(yǔ)句,以便滿足不同的需求。

通過(guò)使用 Mapper 文件,應(yīng)用開(kāi)發(fā)人員可以實(shí)現(xiàn)簡(jiǎn)便、靈活的 SQL 操作,同時(shí)也能更好地維護(hù) SQL 與 Java 代碼之間的解耦。

Mapper文件=>SQL語(yǔ)句

為了對(duì)Mapper中的SQL進(jìn)行優(yōu)化,我們需要對(duì)Mapper文件進(jìn)行解析,排列組合所有可能的合法SQL語(yǔ)句,并對(duì)其中的變量進(jìn)行替換,以便生成合法的SQL語(yǔ)句,并進(jìn)行優(yōu)化。

  • SQL片段排列組合

譬如對(duì)于以下的mapper文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.mapper.CustInfoMapper">
   <select id="custInfoList">
      select * from customer
       <where>
           <if test="nationkey != null and nationkey != ''">
              and c_nationkey = #{nationkey}
           </if>
           <choose>
               <when test="C_MKTSEGMENT != null and C_MKTSEGMENT != ''">
                  and c_mktsegment = #{C_MKTSEGMENT}
               </when>
               <otherwise>
                  and c_phone LIKE '139%'
               </otherwise>
           </choose>
       </where>
   </select>
</mapper>

由于<if>標(biāo)簽里的片段滿足條件才出現(xiàn),所以c_nationkey = ? 可出現(xiàn)可不出現(xiàn);而<choose>標(biāo)簽里的內(nèi)容必須且只能出現(xiàn)其中一個(gè),所以其排列組合只可能出現(xiàn)下面的四種情況。

select * as cnt from customer where c_phone like '139%';
select * as cnt from customer where c_nationkey =  #{nationkey} and c_phone like '139%';
select * as cnt from customer where c_mktsegment = #{C_MKTSEGMENT};
select * as cnt from customer where c_nationkey = #{nationkey} and c_mktsegment = #{C_MKTSEGMENT};

通過(guò)排列組合方式產(chǎn)生的SQL,有可能會(huì)有一些SQL永遠(yuǎn)不會(huì)在真實(shí)的生產(chǎn)環(huán)境中出現(xiàn)。但這些SQL可能會(huì)對(duì)SQL優(yōu)化的過(guò)程產(chǎn)生影響,譬如推薦了一些無(wú)用的索引,或是索引中出現(xiàn)了一些不會(huì)被使用的列。所以用戶需要根據(jù)自己具體的業(yè)務(wù)場(chǎng)景,在PawSQL的SQL篩選預(yù)覽頁(yè)面,排除掉那些不會(huì)真實(shí)出現(xiàn)的SQL組合。

  • 變量替換

對(duì)于mapper文件中的變量,我們會(huì)根據(jù)它所在的上下文,推測(cè)其數(shù)據(jù)類(lèi)型,并根據(jù)數(shù)據(jù)庫(kù)的統(tǒng)計(jì)信息(如有)選擇一個(gè)合適常量來(lái)進(jìn)行替換。譬如對(duì)于以上的四個(gè)SQL,我們會(huì)將#{nationkey}替換為整型常量,而將#{C_MKTSEGMENT}替換為字符串常量,所以最終提交到PawSQL優(yōu)化引擎的是這樣的SQL。

select * as cnt from customer_n where c_phone like '139%';
select * as cnt from customer_n where c_nationkey = 128 and c_phone like '139%';
select * as cnt from customer_n where c_mktsegment = 'A234913';
select * as cnt from customer_n where c_nationkey = 16 and c_mktsegment = 'B123498';

上手指南 - Mapper文件錄入SQL

我們知道,使用PawSQL進(jìn)行SQL優(yōu)化分為三步:

第一步定義工作空間,

第二步錄入待優(yōu)化SQL,使用Mapper文件進(jìn)行SQL優(yōu)化發(fā)生在此步中。

第三步配置優(yōu)化選項(xiàng)、進(jìn)行優(yōu)化。

PawSQL目前支持六種SQL錄入方式,包括本文介紹的Mapper文件。

  • 這里我們選擇Mapper文件的錄入方式, 點(diǎn)擊上傳按鈕上傳對(duì)應(yīng)的Mapper.xml文件。

  • 點(diǎn)擊創(chuàng)建查詢(xún)語(yǔ)句集按鈕來(lái)到'待優(yōu)化SQL預(yù)覽'頁(yè)面,在此頁(yè)面中,您需要排查一些永遠(yuǎn)都不會(huì)出現(xiàn)的SQL組合,以避免生成無(wú)效的優(yōu)化建議。

  • 后續(xù)的步驟是一致的,點(diǎn)擊下一步,完成SQL優(yōu)化任務(wù)的執(zhí)行。

以上就是使用Mapper文件創(chuàng)建PawSQL優(yōu)化的全部?jī)?nèi)容了, 到這里創(chuàng)建自己的賬號(hào)快去試試吧!

關(guān)于PawSQL

PawSQL專(zhuān)注數(shù)據(jù)庫(kù)性能優(yōu)化的自動(dòng)化和智能化,支持MySQL,PostgreSQL,Opengauss等,提供的SQL優(yōu)化產(chǎn)品包括

  • PawSQL Cloud,在線自動(dòng)化SQL優(yōu)化工具,支持SQL審查,智能查詢(xún)重寫(xiě)、基于代價(jià)的索引推薦,適用于數(shù)據(jù)庫(kù)管理員及數(shù)據(jù)應(yīng)用開(kāi)發(fā)人員,
  • PawSQL Advisor,IntelliJ 插件, 適用于數(shù)據(jù)應(yīng)用開(kāi)發(fā)人員,可以IDEA/DataGrip應(yīng)用市場(chǎng)通過(guò)名稱(chēng)搜索“PawSQL Advisor”安裝。
  • PawSQL Engine, 是PawSQL系列產(chǎn)品的后端優(yōu)化引擎,可以獨(dú)立安裝部署,并通過(guò)http/json的接口提供SQL優(yōu)化服務(wù)。PawSQL Engine以docker鏡像的方式提供部署安裝。
責(zé)任編輯:姜華 來(lái)源: PawSQL
相關(guān)推薦

2010-09-27 14:43:38

SQL Server表

2020-08-20 08:06:13

操作系統(tǒng)AWS谷歌

2015-05-22 10:17:47

tableView性能優(yōu)化

2009-07-30 10:40:56

搜索引擎優(yōu)化網(wǎng)站

2011-02-15 13:45:43

Android 3.0

2010-10-19 10:03:02

Lambda表達(dá)式

2024-01-18 09:43:11

MySQL數(shù)據(jù)庫(kù)

2016-12-08 15:47:54

sql優(yōu)化數(shù)據(jù)

2010-07-15 16:42:32

數(shù)據(jù)庫(kù)引擎

2010-04-13 15:04:16

Oracle優(yōu)化

2023-08-16 17:54:40

數(shù)據(jù)中心HDDSSD

2021-07-05 12:23:01

OperaChromebooks瀏覽器

2010-04-15 16:16:33

Oracle SQL

2010-04-15 16:36:13

Oracle SQL

2015-07-28 14:18:21

Ceph性能測(cè)試優(yōu)化

2013-12-18 14:41:06

蘋(píng)果開(kāi)發(fā)者iOS 7

2011-03-31 11:14:51

Sql語(yǔ)句優(yōu)化

2010-01-14 21:07:22

2013-09-02 10:33:44

蘋(píng)果開(kāi)發(fā)者iOS 7

2018-01-09 16:56:32

數(shù)據(jù)庫(kù)OracleSQL優(yōu)化
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)