MySQL中join連接索引優化實戰分析

兩張表左連接索引優化


MySQL中join連接索引優化實戰分析

原始表結構和索引

<code> 
mysql>explain 

select

*

from

news a left

join

new_type b

on

a.type_id=b.TypeId;/<code>
MySQL中join連接索引優化實戰分析

結果:我們看到兩張表都是全表掃描,type類型全是ALL,此時性能最差


<code> 

mysql>

create index type_id

on

news

(

type_id

)

; mysql>explain

select

*

from

news a left

join

new_type b

on

a.type_id=b.TypeId;/<code>


MySQL中join連接索引優化實戰分析

結果:左連接給左表加完索引,沒有任何效果,並且還是全表掃描,效率極差。


<code> 

mysql>

create index type_id

on

news

(

type_id

)

; mysql>explain

select

*

from

news a left

join

new_type b

on

a.type_id=b.TypeId;/<code>
MySQL中join連接索引優化實戰分析

結果:左連接給右表加完索引,使用到了索引,且還是ref級別的。


兩張表右連接索引優化

<code> 

mysql>explain 

select

*

from

news a right

join

new_type b

on

a.type_id=b.TypeId;/<code>
MySQL中join連接索引優化實戰分析

結果:右連接給右表加完索引,沒有任何效果,並且還是全表掃描,效率極差。


<code> 

mysql>explain 

select

*

from

news a left

join

new_type b

on

a.type_id=b.TypeId;/<code>
MySQL中join連接索引優化實戰分析

結果:右連接給左表加完索引,使用到了索引,且還是ref級別的。


注意(單表查詢)多條件查詢:

  1. 我們創建的聯合索引的順序是category_id、comments、views
MySQL中join連接索引優化實戰分析

其中comments使用範圍查詢

結果:雖然使用到了index索引(全表掃描,只是掃描表的時候按照索引次序 進行而不是行。主要優點就是避免了排序, 但是開銷仍然非常大),但是產生了文件排序,性能很差


  1. 創建category_id、views聯合索引


MySQL中join連接索引優化實戰分析


結論:如果在where條件中如果有三個查詢查詢條件key1、key2、key3,其中key2條件是範圍查詢,

則需要創建key1、key3的複合索引。


結論:

  1. 左連接索引加右表。
  2. 右連接索引加左表


點擊關注發私信或評論交流文章中有問題的地方,相互學習和答疑


分享到:


相關文章: