mysql資料庫sql優化 子查詢優化

2021-07-04 09:12:57 字數 755 閱讀 2053

1、什麼是子查詢、表關聯查詢:

子查詢:是指在主sql語句中的select或where子句中使用select查詢語句;select a.name,(select b.name from b where b.id=a.id) from a where a.name lik 'a%'

表關聯查詢:指多個表聯合查詢;select a.name,b.name from a,b where a.id=b.id and a.name like 'a%';

雖然聯合查詢效能並不佳,但是和 mysql 的子查詢比起來還是有非常大的效能優勢。mysql 的子查詢執行計畫一直存在較大的問題,雖然這個問題已經存在多年,但是到目前已經發布的所有穩定版本中都普遍存在,一直沒有太大改善。雖然官方也在很早就承認這一問題,並且承諾盡快解決,但是至少到目前為止我們還沒有看到哪乙個版本較好的解決了這一問題。

預設情況,子查詢中使用全表掃瞄,所以總的i/o次數=主表數*子表數。當主表、子表中資料均查過1w時,使用子查詢的整體效能就會立即下降,而且下降的會很厲害(測試發現大概需要10s多)

針對上面問題,解決方案:

1)對子表中的關聯列建立索引、或建立外來鍵關係:

如下有兩張表a、b,使用子查詢其執行計畫如下

a表結構:

mysql資料庫sql優化

sql優化 本文件描述了mysql資料庫的sql優化,從整體上描述mysql資料庫的sql執行過程,及整個流程上相關優化點,重點描述innodb儲存引擎的索引優化及鎖機制,旨在為讀者提供在mysql上做sql優化的思路,達到授人以漁的效果,希望能為讀者帶來收穫。效能 完成某項任務所需要的時間度量,即...

MySQL資料庫SQL優化(原則)

通過web應用關係圖譜可以看出web應用的響應速度取決於多個方面 優化方法 1 改變 sql 執行計畫 明確了優化目標之後,我們需要確定達到我們目標的方法。對於 sql 語句來說,達到上述2個目標的方法其實只有乙個,那就是改變 sql 的執行計畫,讓他盡量 少走彎路 盡量通過各種 捷徑 來找到我們需...

mysql資料庫sql語句優化

昨天幫同事優化了乙個sql語句發出來共勉下 select t.select s.codename from sys codelist s where s.codevalue t.packagingtype and s.kindcode packaging as packagingtypename,s...