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

高級SQL優(yōu)化之查詢折疊

數(shù)據(jù)庫 其他數(shù)據(jù)庫
PawSQL Cloud,在線自動化SQL優(yōu)化工具,支持SQL審查,智能查詢重寫、基于代價的索引推薦,適用于數(shù)據(jù)庫管理員及數(shù)據(jù)應(yīng)用開發(fā)人員。PawSQL Advisor,IntelliJ 插件, 適用于數(shù)據(jù)應(yīng)用開發(fā)人員,可以IDEA/DataGrip應(yīng)用市場通過名稱搜索“PawSQL Advisor”安裝。

定義

查詢折疊指的是把查詢中的視圖、CTE或是DT子查詢展開,并與引用它的查詢語句合并,從而減少查詢語句的子查詢數(shù)目,降低其復(fù)雜度的一種優(yōu)化算法。其收益有以下三個方面:

  • 避免中間結(jié)果集的物化。
  • 啟用更多的連接順序規(guī)劃。
  • 提供更多的索引建議機(jī)會(PawSQL索引推薦引擎)。

考慮下面的例子:

SELECT * FROM (SELECT c_custkey, c_name FROM customer) AS dt;

重寫后的SQL為:

SELECT c_custkey, c_name FROM customer

注1. 在下文中,我們將使用“視圖”一詞,但所有描述也適用于CTE或是DT子查詢。

注2. 本文所使用的執(zhí)行計劃可視化工具為 PawSQL Explain Visualizer , 支持MySQL、PostgreSQL、openGauss等數(shù)據(jù)庫。

查詢折疊的兩種類型

PawSQL優(yōu)化引擎針對不同的SQL語法結(jié)構(gòu),支持兩種查詢折疊的優(yōu)化策略。

查詢折疊類型 I

適用條件

  • 在視圖本身中,沒有distinct關(guān)鍵字;
  • 在視圖本身中,沒有分組、聚集函數(shù)或窗口函數(shù);
  • 在視圖本身中,沒有LIMIT子句;
  • 在視圖本身中,沒有UNION或者UNION ALL;
  • 在外部查詢塊中,被折疊的視圖不是外連接的一部分。

重寫策略

將視圖拆分并合并到外部查詢塊中。

案例

  • 原始查詢
select c.c_name, sum(o_totalprice) price
from customer c, (select o_custkey, o_totalprice from orders where o_shippriority=0)dt
where c.c_custkey = dt.o_custkey
group by c.c_name
  • 原執(zhí)行計劃

圖片

  • 優(yōu)化后的查詢
select c.c_name, sum(o_totalprice) as price
from customer c, orders
where c.c_custkey = o_custkey and o_shippriority=0
group by c.c_name
  • 優(yōu)化后的執(zhí)行計劃

圖片

我們可以看到,原查詢的執(zhí)行計劃中有一個物化步驟,通過SQL重寫后,消除了此物化步驟。

查詢折疊類型 II

適用條件:

  • 外部查詢塊中,視圖是唯一的表引用。
  • 在外部查詢塊中,沒有分組、聚集函數(shù)和窗口函數(shù)。
  • 在視圖內(nèi)部沒有使用窗口函數(shù)。

重寫策略:

將外部查詢合并至視圖,并刪除外部查詢。

案例

  • 原始查詢
select dt.price
from (select c.c_name, sum(o_totalprice) price
 from customer c, orders
 where c.c_custkey = orders.o_custkey
 group by c.c_name) dt
where dt.c_name like '139%';
  • 原執(zhí)行計劃

圖片

  • 優(yōu)化后的查詢
select sum(o.O_TOTALPRICE)
from customer as c, orders o
where c.c_custkey = o.o_custkey
and c.c_name like '139%'
group by c.c_name
  • 優(yōu)化后的執(zhí)行計劃

圖片

與類型1類似,我們可以看到重寫優(yōu)化后消除了物化步驟,同時性能提升了231.83%。

注3. 其中對于第一種類型,MySQL 5.7以及PostgreSQL 14.0以上的版本都在優(yōu)化器內(nèi)部進(jìn)行了支持;而第二類查詢折疊的優(yōu)化,在最新的MySQL及PostgreSQL版本中都沒有支持。

PawSQL對查詢折疊優(yōu)化的支持

  • 自動優(yōu)化:PawSQL針對所有數(shù)據(jù)庫默認(rèn)開啟此優(yōu)化,以下是案例2在PawSQL中的優(yōu)化結(jié)果;可以看到,基于重寫后的SQL,PawSQL進(jìn)一步推薦了更高效的索引。

圖片

  • 點(diǎn)擊優(yōu)化頁面的執(zhí)行計劃對比圖標(biāo),可以看到優(yōu)化前后的執(zhí)行計劃對比。

圖片

  • 啟用設(shè)置:用戶可以在自己的默認(rèn)優(yōu)化設(shè)置或是定義每個優(yōu)化任務(wù)的時候自主啟用或禁用該選項(xiàng)。

圖片

關(guān)于PawSQL

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

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

2023-10-09 07:42:49

PawSQL數(shù)據(jù)庫管理

2023-10-23 09:19:47

PawSQL數(shù)據(jù)庫

2023-11-07 07:50:55

LIMIT子句下推優(yōu)化

2010-06-12 15:31:04

MySQL查詢優(yōu)化

2023-11-03 07:29:51

QL優(yōu)化分組字段順序優(yōu)化

2023-10-16 07:49:25

PawSQL數(shù)據(jù)庫

2018-01-09 16:56:32

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

2017-09-05 09:02:06

Oraclenot null優(yōu)化

2021-07-16 23:01:03

SQL索引性能

2010-06-10 17:59:05

2011-02-23 13:26:01

SQL查詢優(yōu)化

2018-04-19 09:02:14

SQL ServerSQL性能優(yōu)化

2021-08-17 10:39:54

SQL Server數(shù)據(jù)庫優(yōu)化

2023-07-12 08:55:16

PawSQL數(shù)據(jù)庫

2021-05-11 09:01:37

SQL優(yōu)化索引

2021-07-26 18:23:23

SQL策略優(yōu)化

2020-07-13 07:10:09

SQLSQL語句查詢

2010-07-01 14:23:25

SQL Server查

2011-08-18 15:03:47

SQL Server多優(yōu)化方案

2025-01-20 15:06:42

點(diǎn)贊
收藏

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