Mysql之組合索引方法詳解
對于任何DBMS,索引都是進行優(yōu)化的最主要的因素。對于少量的數(shù)據(jù),沒有合適的索引影響不是很大,但是,當隨著數(shù)據(jù)量的增加,性能會急劇下降。
如果對多列進行索引(組合索引),列的順序非常重要,MySQL僅能對索引最左邊的前綴進行有效的查找。例如:
假設(shè)存在組合索引(c1,c2),查詢語句select * from t1 where c1=1 and c2=2能夠使用該索引。查詢語句select * from t1 where c1=1也能夠使用該索引。但是,查詢語句select * from t1 where c2=2不能夠使用該索引,因為沒有組合索引的引導(dǎo)列,即,要想使用c2列進行查找,必需出現(xiàn)c1等于某值。
舉例說明:
創(chuàng)建兩張表book(圖書表)和bookclass(圖書分類表)
select b.ISBN FROM book b where b.CATEGORY_ID = 1;
執(zhí)行時間為:0.053s
使用explain來分析一下該SQL:
type = ALL Extra=Using where,全表查詢沒有使用索引。
explain顯示了mysql如何使用索引來處理select語句以及連接表??梢詭椭x擇更好的索引和寫出更優(yōu)化的查詢語句。
ALL 對于每個來自于先前的表的行組合,進行完整的表掃描。如果表是第一個沒標記const的表,這通常不好,并且通常在它情況下很差。通??梢栽黾痈嗟乃饕灰褂肁LL,使得行能基于前面的表中的常數(shù)值或列值被檢索出。
創(chuàng)建組合索引:
create index index_isbn on book (CATEGORY_ID,ISBN) ;
再次執(zhí)行SQL,發(fā)現(xiàn)時間縮短到0.009s
使用explain來分析一下該SQL:
type = ref,Extra = Using index 使用了索引查詢。
ref 對于每個來自于前面的表的行組合,所有有匹配索引值的行將從這張表中讀取。如果聯(lián)接只使用鍵的最左邊的前綴,或如果鍵不是UNIQUE或PRIMARY KEY(換句話說,如果聯(lián)接不能基于關(guān)鍵字選擇單個行的話),則使用ref。如果使用的鍵僅僅匹配少量行,該聯(lián)接類型是不錯的。
到此這篇關(guān)于Mysql之組合索引方法詳解的文章就介紹到這了,更多相關(guān)Mysql之組合索引內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步的代碼詳解
在數(shù)據(jù)庫應(yīng)用中,我們經(jīng)常需要對數(shù)據(jù)進行某些操作,并在操作完成后進行相應(yīng)的處理,這時候,可以使用觸發(fā)器來實現(xiàn)這些功能,MySQL提供了強大的觸發(fā)器功能,本文將給大家詳細介紹MySQL觸發(fā)器實現(xiàn)兩表數(shù)據(jù)同步,需要的朋友可以參考下2023-12-12
MySQL 搭建雙主復(fù)制服務(wù)并通過 HAProxy 負載均衡的過程詳解
在數(shù)據(jù)庫管理中,數(shù)據(jù)的備份和同步是至關(guān)重要的環(huán)節(jié),而雙主復(fù)制(Dual Master Replication)作為一種高可用性和數(shù)據(jù)同步的解決方案,本文將介紹MySQL雙主復(fù)制的配置過程并通過 HAProxy 負載均衡,感興趣的朋友一起看看吧2024-03-03
MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法(含舉例)
今天學(xué)mysql函數(shù)的時候在自己服務(wù)器上的MySQL碰見了個奇怪的問題,下面這篇文章主要給大家介紹了關(guān)于MySQL報錯:sql_mode=only_full_group_by的4種輕松解決方法,需要的朋友可以參考下2023-01-01
step by step配置mysql復(fù)制的具體方法
每個服務(wù)器必須有唯一的server-id,默認為1,為了防止沖突,一般建議設(shè)置為IP地址的后幾位,本例設(shè)置為12,通過修改主庫的my.cnf文件實現(xiàn)2013-09-09

