成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

針對Mapper文件的SQL優化

數據庫 其他數據庫
PawSQL為了方便應用開發人員進行SQL性能調優,提供了基于Mybatis的mapper文件創建SQL優化任務的功能,讓應用開發人員在頁面上通過鼠標操作,完成其應用的SQL性能優化。

簡介

MyBatis是一款開源的持久層框架,它封裝了JDBC操作數據庫時的常用API,并提供了ORM映射的功能,使得開發者可以使用Java對象來操作數據庫。開發者可以通過XML配置或注解方式自定義SQL語句和參數映射規則,從而使得應用開發人員無需過多的了解數據庫,就可以開發出功能完善應用程序。

但是天下沒有免費的午餐,使用MyBatis也使得應用開發人員進行SQL調優變得困難。通過MyBatis開發的應用程序,傳統方式下需要通過模擬應用的接口調用、啟動數據庫的SQL日志、獲取應用的SQL查詢語句、對獲取的SQL進行優化,這讓整個SQL調優的流程復雜且費時。

PawSQL為了方便應用開發人員進行SQL性能調優,提供了基于Mybatis的mapper文件創建SQL優化任務的功能,讓應用開發人員在頁面上通過鼠標操作,完成其應用的SQL性能優化。 

工作原理

Mapper文件

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

Mapper 文件通常包含四個主要部分:

  • 命名空間,用于指定對應操作的實體類或其接口類的全路徑名。
  • SQL語句片段,可以通過 select、insert、update、delete 等標簽來定義不同的 SQL 語句。
  • 映射語句定義,可以通過映射語句來將操作的參數和返回值與上述 SQL 語句進行綁定的方式。
  • 流程控制標簽,如<if>、where、foreach等標簽,根據不同的條件動態生成SQL語句,以便滿足不同的需求。

通過使用 Mapper 文件,應用開發人員可以實現簡便、靈活的 SQL 操作,同時也能更好地維護 SQL 與 Java 代碼之間的解耦。

Mapper文件=>SQL語句

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

  • SQL片段排列組合

譬如對于以下的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>標簽里的片段滿足條件才出現,所以c_nationkey = ? 可出現可不出現;而<choose>標簽里的內容必須且只能出現其中一個,所以其排列組合只可能出現下面的四種情況。

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};

通過排列組合方式產生的SQL,有可能會有一些SQL永遠不會在真實的生產環境中出現。但這些SQL可能會對SQL優化的過程產生影響,譬如推薦了一些無用的索引,或是索引中出現了一些不會被使用的列。所以用戶需要根據自己具體的業務場景,在PawSQL的SQL篩選預覽頁面,排除掉那些不會真實出現的SQL組合。

  • 變量替換

對于mapper文件中的變量,我們會根據它所在的上下文,推測其數據類型,并根據數據庫的統計信息(如有)選擇一個合適常量來進行替換。譬如對于以上的四個SQL,我們會將#{nationkey}替換為整型常量,而將#{C_MKTSEGMENT}替換為字符串常量,所以最終提交到PawSQL優化引擎的是這樣的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進行SQL優化分為三步:

第一步定義工作空間,

第二步錄入待優化SQL,使用Mapper文件進行SQL優化發生在此步中。

第三步配置優化選項、進行優化。

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

  • 這里我們選擇Mapper文件的錄入方式, 點擊上傳按鈕上傳對應的Mapper.xml文件。

  • 點擊創建查詢語句集按鈕來到'待優化SQL預覽'頁面,在此頁面中,您需要排查一些永遠都不會出現的SQL組合,以避免生成無效的優化建議。

  • 后續的步驟是一致的,點擊下一步,完成SQL優化任務的執行。

以上就是使用Mapper文件創建PawSQL優化的全部內容了, 到這里創建自己的賬號快去試試吧!

關于PawSQL

PawSQL專注數據庫性能優化的自動化和智能化,支持MySQL,PostgreSQL,Opengauss等,提供的SQL優化產品包括

  • PawSQL Cloud,在線自動化SQL優化工具,支持SQL審查,智能查詢重寫、基于代價的索引推薦,適用于數據庫管理員及數據應用開發人員,
  • PawSQL Advisor,IntelliJ 插件, 適用于數據應用開發人員,可以IDEA/DataGrip應用市場通過名稱搜索“PawSQL Advisor”安裝。
  • PawSQL Engine, 是PawSQL系列產品的后端優化引擎,可以獨立安裝部署,并通過http/json的接口提供SQL優化服務。PawSQL Engine以docker鏡像的方式提供部署安裝。
責任編輯:姜華 來源: PawSQL
相關推薦

2010-09-27 14:43:38

SQL Server表

2020-08-20 08:06:13

操作系統AWS谷歌

2015-05-22 10:17:47

tableView性能優化

2009-07-30 10:40:56

搜索引擎優化網站

2011-02-15 13:45:43

Android 3.0

2010-10-19 10:03:02

Lambda表達式

2024-01-18 09:43:11

MySQL數據庫

2016-12-08 15:47:54

sql優化數據

2023-08-16 17:54:40

數據中心HDDSSD

2010-07-15 16:42:32

數據庫引擎

2021-07-05 12:23:01

OperaChromebooks瀏覽器

2010-04-13 15:04:16

Oracle優化

2010-04-15 16:36:13

Oracle SQL

2010-04-15 16:16:33

Oracle SQL

2013-12-18 14:41:06

蘋果開發者iOS 7

2015-07-28 14:18:21

Ceph性能測試優化

2013-09-02 10:33:44

蘋果開發者iOS 7

2010-01-14 21:07:22

2010-09-06 16:16:20

DB2 優化器

2024-05-22 08:00:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区四区在线视频 | 国外成人在线视频 | 久久一二区 | v片网站 | 欧美日韩精品一区 | 午夜丁香视频在线观看 | 视频一区在线 | 91精品国产高清久久久久久久久 | 看片91| 日韩免费视频一区二区 | 欧美国产精品久久久 | 一级黄片一级毛片 | 国产成人精品一区二区三区视频 | 亚洲免费在线观看av | 噜噜噜噜狠狠狠7777视频 | 天堂久久av | 成人午夜电影在线观看 | 一区二区在线免费观看 | 中文成人在线 | 黑人久久 | 成人在线免费观看视频 | 欧美精选一区二区 | 国产精品99精品久久免费 | 久久9999久久 | 色综合99| 特级a欧美做爰片毛片 | 日韩精品在线一区 | 一区二区三区国产好 | 中文字幕乱码一区二区三区 | 欧美日韩国产一区二区三区 | 国产欧美一区二区三区在线看蜜臀 | 精品久久香蕉国产线看观看亚洲 | 久久精品亚洲欧美日韩久久 | 亚洲a在线观看 | 国产精品日韩欧美 | 久久伊人精品一区二区三区 | 精品一区二区三区免费毛片 | 国产成人综合一区二区三区 | 亚洲狠狠丁香婷婷综合久久久 | 日韩综合在线 | 精品欧美一区免费观看α√ |