程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql數據庫sql優化——子查詢優化

mysql數據庫sql優化——子查詢優化

編輯:MySQL綜合教程

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表結構:

\

\

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved