首先分析兩張表的查詢
例子:查詢一級選單下的所有二級選單
select * from category cate
left join categorysecond cse on cate.cid=cse.cid
執行sql成功,分析這條sql
為這個字段建立索引:
1,在category中建立索引
可以發現:
雖然我們建立了索引,但是這個sql並麼有用到我們所建立的索引,是因為什麼呢?
我接著往下看
2,在categorysecond中建立索引
可以看到,在右表categorysecond中建立索引之後,就用到了索引
效能也得到了提高:
type由all變成了ref,rows由36變成了4
思考一下,得出結論:
在進行多表關聯查詢的時候,左表相當於資料來源,而右表相當於目標表,左表任何時候,都一定會全部載入,而右表只會載入符合條件的記錄行,所以即使我們將索引建立到了左表,也不會生效!!!
接下來再繼續看看三表的情況吧!
例子查詢選單中的所有商品
select * from category cate
left join categorysecond cas on cate.cid=cas.cid
left join product pro on pro.csid=cas.csid
分析這條sql
上圖所示:未建立索引,其type為all,rows中顯示了對應表的所有行,即全表掃瞄
根據兩張表的優化結論,直接給右表categorysecond中的cid和product中的csid建立索引
create index ind_cid on categorysecond(cid);
create index ind_csid on product(csid)
再次分析這條sql
可以看到該sql使用了我們建立的兩個索引
type型別由all變成了ref型別,rows預查詢行也大大減少
總結:在進行多表關聯查詢時,在被關聯表上建立索引,可以使用到索引字段。
mysql之多表建立索引分析
一.2張表分析 select form users left join dept on users.deptid dept.id 以左邊為驅動,左邊表的資料自然全有了,所以要再dept表建立id索引,我這舉的是個特例了,因為部門表id是主鍵,自動建立索引了。二.3張表分析 select form u...
mysql高階索引 Mysql高階 索引優化全解
是否會使用索引,是mysql的關鍵 1.sql效能下降原因查詢語句寫的不好,連線子查詢太多,沒有建索引等等 索引失效 關聯jion表過多 伺服器引數設定不合適2.索引優化 索引是什麼?索引就是一種排好序的查詢資料結構,常見模型有雜湊表 有序陣列 二叉搜尋樹 目前最常用的innodb引擎使用的模型是b...
Oracle篇 之 多表查詢
一 概念 從多個表中查詢資料時,需要在表和表間建立連線,一般使用主外來鍵建立連線 二 連線種類 1 等連線 連線條件使用等號 非等連線 連線條件使用等號以外的其它符號 2 內連線 根據指定的連線條件進行連線查詢,滿足連線條件的資料才會出現在結果集 最常見的等值連線 外連線 在內連線的基礎上,將某個連...