mysql資料庫sql最佳化——子查詢最佳化,mysql資料庫sql最佳化

來源:互聯網
上載者:User

mysql資料庫sql最佳化——子查詢最佳化,mysql資料庫sql最佳化
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表結構:



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.