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