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
- MySQL效能優化之簡單sql改寫MySql優化
- SQL改寫的方法,select group by sumSQL
- DB2 SQL改寫DB2SQL
- Oracle case when改寫SQLOracleSQL
- SQL Server AlwaysOn的Oracle等價技術SQLServerOracle
- 一種提升SQL改寫效率的方法SQL
- PostgreSQL優化案例之 反連線與外連線等價改寫SQL優化
- NavicatPremium 連線SQL Server 、MySQL等REMServerMySql
- Mysql 分組排序的sql寫法MySql排序
- SQL 改寫系列七:謂詞移動SQL
- SQL 改寫系列六:謂詞推導SQL
- MySQL 常用 SQL 增刪改查操作詳解MySql
- MySQL與SQL的觸發器的不同寫法MySql觸發器
- SQL 抽象語法樹及改寫場景應用SQL抽象語法樹
- SQL抽象語法樹及改寫場景應用SQL抽象語法樹
- SQL 改寫系列十:半連線轉內連線SQL
- mysql調優從書寫sql開始MySql
- Golang原生sql操作Mysql資料庫增刪改查GolangMySql資料庫
- MySQL增刪改查學習筆記(手寫)MySql筆記
- sql改寫優化:簡單規則重組實現SQL優化
- golang使用go-sql-driver實現mysql增刪改操作GolangMySql
- mysql 索引巧用,SQL語句寫得忒野了MySql索引
- sql devloper 用法的和SQL 編寫SQLdev
- sql小筆記(增刪改查——新增列、修改表名、列的欄位型別等)SQL筆記型別
- 從兩張表中取資料的 SQL 能改寫成 Laravel Eloquent 的形式嗎?SQLLaravel
- 自寫的使用PDO對mysql資料庫的增刪改查操作類MySql資料庫
- SQL增刪改查SQL
- 全球 1%人口患有自閉症,AI、VR等技術如何改寫它的治療方式AIVR
- MySQL寫sql的21個好習慣,讓你的工作效率翻倍MySql
- MySQL寫sql的21個好習慣,學習工作效率翻倍MySql
- [Mysql]SQLMySql
- C#寫一套最全的MySQL幫助類(包括增刪改查)C#MySql
- 小米開源自研智慧SQL優化與改寫工具SOAR使用指南SQL優化
- 30000字學完MySql資料庫(安裝、SQL、索引、事務等)MySql資料庫索引
- sql指令,增,刪,查,改SQL