圖文詳解MySQL中兩表關(guān)聯(lián)的連接表如何創(chuàng)建索引
本文介紹了MySQL中兩表關(guān)聯(lián)的連接表是如何創(chuàng)建索引的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面來看看詳細(xì)的介紹:
問題介紹
創(chuàng)建數(shù)據(jù)庫的索引,可以選擇單列索引,也可以選擇創(chuàng)建組合索引。
遇到如下這種情況,用戶表(user)與部門表(dept)通過部門用戶關(guān)聯(lián)表(deptuser)連接起來,如下圖所示:
表間關(guān)系
問題就是,在這個(gè)關(guān)聯(lián)表中該如何建立索引呢?
針對(duì)該表,有如下四種選擇:
- 針對(duì)于user_uuid建立單列索引idx_user
- 針對(duì)于user_dept建立單列索引idx_dept
- 建立組合索引idx_user_dept,即(user_uuid,dept_uuid)
- 建立組合索引idx_dept_user,即(dept_uuid,user_uuid)
對(duì)關(guān)聯(lián)表的查詢,有如下四種情況:
-- 一、人員查所屬部門用and方式 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d,org_user u,org_dept_user duser WHERE u.user_uuid=duser.user_uuid AND d.dept_uuid=duser.dept_uuid AND u.user_code="dev1"; -- 二、人員查所屬部門用join方式 EXPLAIN SELECT d.dept_name,u.* FROM org_user u LEFT JOIN org_dept_user du ON u.user_uuid=du.user_uuid LEFT JOIN org_dept d ON du.dept_uuid=d.dept_uuid WHERE u.user_code="dev1"; -- 三、部門查人員用and方式 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d,org_user u,org_dept_user du WHERE u.user_uuid=du.user_uuid AND d.dept_uuid=du.dept_uuid AND d.dept_code="D006"; -- 四、部門查所屬人員用join方式 EXPLAIN SELECT d.dept_name,u.* FROM org_dept d LEFT JOIN org_dept_user du ON d.dept_uuid=du.dept_uuid LEFT JOIN org_user u ON u.user_uuid=du.user_uuid WHERE d.dept_code="D006";
測(cè)試驗(yàn)證
一.人員查所屬部門用and方式
1.1 關(guān)聯(lián)表無索引
1.2 單索引 Idx_dept
1.3 單索引 Idx_user
1.4 組合索引 Idx_dept_user
1.5 組合索引 Idx_user_dept
1.6 所有都建立上
二 、人員查所屬部門用join方式
2.1 關(guān)聯(lián)表無索引
2.2 單索引 Idx_dept
2.3 單索引 Idx_user
2.4 組合索引 Idx_dept_user
2.5 組合索引 Idx_user_dept
2.6 所有都建立上
三 、部門查人員用and方式
3.1 關(guān)聯(lián)表無索引
3.2 單索引 Idx_dept
3.3 單索引 Idx_user
3.4 組合索引 Idx_dept_user
3.5 組合索引 Idx_user_dept
3.6 所有都建立上
四 、部門查所屬人員用join方式
4.1 關(guān)聯(lián)表無索引
4.2 單索引 Idx_dept
4.3 單索引 Idx_user
4.4 組合索引 Idx_dept_user
4.5 組合索引 Idx_user_dept
4.6 所有都建立上
結(jié)論
通過上面的實(shí)際測(cè)試結(jié)果可以得出如下結(jié)論:針對(duì)于該關(guān)聯(lián)表分別針對(duì)于user_uuid與dept_uuid建立單列索引idx_user,idx_dept最優(yōu)。
其中索引idx_user適用與通過人員ID查詢出該人員所在的部門;索引idx_dept適用與通過部門查詢出該部門下所屬的人員。
其它
測(cè)試數(shù)據(jù)
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
MySQL日期格式化yyyy-mm-dd詳解(DATE_FORMAT()函數(shù))
MySQL提供了很多功能強(qiáng)大、方便易用的函數(shù),在進(jìn)行數(shù)據(jù)庫管理以及數(shù)據(jù)的查詢和操作時(shí),幫助我們提高對(duì)數(shù)據(jù)庫的管理效率,下面這篇文章主要給大家介紹了關(guān)于MySQL日期格式化yyyy-mm-dd(DATE_FORMAT()函數(shù))的相關(guān)資料,需要的朋友可以參考下2023-01-01淺談?dòng)唵沃貥?gòu)之 MySQL 分庫分表實(shí)戰(zhàn)篇
這篇文章主要介紹了 MySQL 分庫分表方法的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容,希望能幫助到你2021-09-09mysql學(xué)習(xí)之引擎、Explain和權(quán)限的深入講解
這篇文章主要給大家介紹了關(guān)于mysql學(xué)習(xí)之引擎、Explain和權(quán)限的相關(guān)資料,文中通過示例代碼將引擎、Explain和權(quán)限介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06Mysql行與列的多種轉(zhuǎn)換(行轉(zhuǎn)列,列轉(zhuǎn)行,多列轉(zhuǎn)一行,一行轉(zhuǎn)多列)
在MySQL中,行轉(zhuǎn)列和列轉(zhuǎn)行都是非常有用的操作,本文就來介紹一下Mysql行與列的多種轉(zhuǎn)換,主要包括行轉(zhuǎn)列,列轉(zhuǎn)行,多列轉(zhuǎn)一行,一行轉(zhuǎn)多列,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08Mysql中使用count加條件統(tǒng)計(jì)的實(shí)現(xiàn)示例
本文主要介紹了Mysql中使用count加條件統(tǒng)計(jì)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07MySQL綠色版(zip解壓版)的安裝圖文教程(mysql-5.6.22-win32.zip)
由于工作需要最近要開始研究MySQL了(看來學(xué)習(xí)都是逼出來的),本人對(duì)mysql沒有研究,可以說一個(gè)小白。 下面就從安裝開始吧,雖然網(wǎng)上關(guān)于這方面的東西很多,還是需要自己把操作過程寫下來2016-06-06