MySQL的SQL等價改寫
自己原文公眾號: https://mp.weixin.qq.com/s/3QNx3z1Q4TAMmrHC8qh3Rw
先上一下實驗資料。
再上一句SQL:
SELECT
*
FROM
h1,
h3
WHERE
h1.id = h3.id
AND (h1.name) IN (SELECT
h1.name
FROM
h1,
h3
WHERE
h1.id = h3.id
AND (h1.name) IN (SELECT
h1.name
FROM
h1,
h3
WHERE
h1.id = h3.id AND h1.id IN (1)
GROUP BY h1.id , h1.name)
GROUP BY h1.id , h1.name)
AND h1.id IN (1);
為什麼會寫成這樣?連美化都美化不出來?
別問我,我也不知道。只有你想不到的沒有做不到的。寫出這樣的人也不容易,但是呢,好像無用功太多了。
我只是將實際的表名換了一下,資料也換了一下。
執行結果如圖:
看一下,他就一行,但是由於層層巢狀。掃描了4行。
等價改寫以後:
SELECT
*
FROM
h1,
h3
WHERE
h1.id = h3.id
AND h1.id IN (1);
一般來說真實環境的資料絕對不是1行這樣的資料,那麼巢狀起來掃描的就多了很多了。
需求來了不是來就寫,寫一定要等價,其實日常中我發現很多SQL其實不是和需求等價的。只是你覺得或者我以為,雖然結果一樣但是實際過程完全不一樣。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2847322/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL KEEP 視窗函式等價改寫案例SQL函式
- 異構資料庫遷移 sql等價改寫資料庫SQL
- Oracle到PostgreSQL等價改寫OracleSQL
- sql改寫SQL
- MySQL效能優化之簡單sql改寫MySql優化
- 一條SQL的改寫SQL
- 改寫不走索引的SQL索引SQL
- PostgreSQL優化案例之 反連線與外連線等價改寫SQL優化
- SQL改寫優化SQL優化
- SQL Server AlwaysOn的Oracle等價技術SQLServerOracle
- Oracle case when改寫SQLOracleSQL
- DB2 SQL改寫DB2SQL
- SQL改寫的方法,select group by sumSQL
- 一種提升SQL改寫效率的方法SQL
- sql優化案例:改變表的寫法使代價和邏輯讀降下來SQL優化
- 用分析函式改寫冗長的sql函式SQL
- oracle sql tunning 15 --常用改寫OracleSQL
- NavicatPremium 連線SQL Server 、MySQL等REMServerMySql
- MySQL LIMIT 如何改寫成Oracle limitMySqlMITOracle
- MySQL In不能用內連線改寫MySql
- Mysql 分組排序的sql寫法MySql排序
- SQL 改寫系列七:謂詞移動SQL
- SQL 改寫系列六:謂詞推導SQL
- MySQL中常用SQL語句的編寫MySql
- 【中亦安圖】SQL優化之基於SQL特徵的改寫(9)SQL優化特徵
- SQLServer效能優化之改寫SQL語句SQLServer優化
- MySQL與SQL的觸發器的不同寫法MySql觸發器
- 由Delphi程式改寫Sql(2000)的儲存過程SQL儲存過程
- 發改委開價格提醒會阿里京東等15家電商參加阿里
- 全球 1%人口患有自閉症,AI、VR等技術如何改寫它的治療方式AIVR
- MySQL增刪改查學習筆記(手寫)MySql筆記
- SQL抽象語法樹及改寫場景應用SQL抽象語法樹
- SQL 抽象語法樹及改寫場景應用SQL抽象語法樹
- SQL 改寫系列十:半連線轉內連線SQL
- 改寫一個要跑5小時的SQL成1分鐘SQL
- mysql調優從書寫sql開始MySql
- MySQL not in巢狀查詢改寫成外連線方式MySql巢狀
- Golang原生sql操作Mysql資料庫增刪改查GolangMySql資料庫