MySQL高階篇之多表索引優化實戰

2021-09-27 18:09:41 字數 1503 閱讀 2152

首先分析兩張表的查詢

例子:查詢一級選單下的所有二級選單

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 內連線 根據指定的連線條件進行連線查詢,滿足連線條件的資料才會出現在結果集 最常見的等值連線 外連線 在內連線的基礎上,將某個連...