鍍金池/ 問答/PHP  數(shù)據(jù)庫/ A 表 join B 表 ,用B表字段排序,如何命中索引,優(yōu)化效率

A 表 join B 表 ,用B表字段排序,如何命中索引,優(yōu)化效率

在設計表的時候,經(jīng)常會使用join 做關(guān)聯(lián)
現(xiàn)在出現(xiàn)這樣情況:
A 表 join B 表 ,要用 B表 字段做排序,
那么如何命中索引,提高sql 效率

回答
編輯回答
擱淺

一般來說,mysql的兩個表的連接是先找出A表的一條記錄,然后根據(jù)連接條件找出B表中的所有記錄,然后再回到A表找到下一條記錄....
但是你的情況是根據(jù)B的某個字段排序,如果按照我上面說的即使在B的排序字段上加了索引那么也不會用到的。Mysql自身有查詢優(yōu)化器的,如果單純的是你說的業(yè)務邏輯,有可能查詢優(yōu)化器會改變你的連接順序(變成B連接A),這樣就變成在B中找到一條記錄,然后再去A表找記錄。如果這個時候再在B表上建索引就會用到。
具體的情況你要用explain看一下mysql的查詢計劃才好做優(yōu)化。
在這里再啰嗦一句,你也可以在你的連接字段和排序字段上建立一個“聯(lián)合索引”。這樣相對分開建索引效率會高一些。但是要遵循向左原則

2017年1月25日 04:29