對mysql聯合索引中的字段進行合理排序

2022-02-12 14:55:28 字數 1129 閱讀 1846

在mysql的where條件中,有時會用到很多的條件,通常為了加快速度會把這些字段放到聯合索引中,可以更快的提高搜尋速度;

但是對聯合索引中欄位順序的合理排序,便更能提高速度

例子:select * from table where (groupid=1000) and (userid=500) and (time=140012345)

建立的索引也通常很隨性的就按照where條件中字段的順序建立 

alter  table  table  add  index g_u_time_index(groupid,userid,time);

那麼mysql就會先檢索到groupid=1000的所有資料,假如搜到了1000條,再在檢索到的1000條資料中再檢索userid=500的資料,假設還剩餘300條,再在300條中搜尋time=140012345的資料,假設就剩了100條;這樣總共搜尋了1000+300+100=1400條資料才找到符合的100條

但是為了更好的優化,我們現在需要在建立索引前,對這幾個字段進行計算,計算他們在表中所佔的比例

可以寫乙個select語句來檢視:計算各個條件在表中所佔的比例大小

select count(*) total,sum(groupid=1000) gtotal,sum(userid=500)  utotal,sum(time=1400123456) time  from table;

total  10000

gtotal  1000

utotal  300

time    800

可見如果先搜尋島userid=500的資料就可以剔除掉一大半,只剩下300條符合的,再在300中搜尋符合time=1400123456和groupid=1000的資料,這樣就大大縮減了查詢次數;

按照從小到大的順序排列,可以減少搜尋次數

sql改為:select * from table where(userid=500) and (time=140012345) and (groupid=1000)

alter  table  table  add  index g_u_time_index( userid , time , groupid)

參考:《高效能mysql》第五章建立高效能索引

mysql 字段操作 mysql如何對欄位進行操作

mysql如何對欄位進行操作 閱讀 104 1 mysql修改欄位的預設值 alter table tb mer team column drop constraint df tb mer team column columnorder alter table tb mer team column ...

mysql中的聯合索引

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。如 建立 姓...

mysql的聯合索引 mysql聯合索引詳解

聯合索引又叫復合索引。對於復合索引 mysql從左到右的使用索引中的字段,乙個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index a,b,c 可以支援a a,b a,b,c 3種組合進行查詢,但不支援 b,c進行查詢 當最左側欄位是常量引用時,索引就十分有效。兩個或更多個...