聯合索引又叫複合索引。對於複合索引:Mysql從左到右的使用索引中的字段,一個查詢可以只使用索引中的一部份,但只能是最左側部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進行查找,但不支持 b,c進行查找 .當最左側字段是常量引用時,索引就十分有效。
索引原則
1.索引越少越好
原因:主要在修改數據時,第個索引都要進行更新,降低寫速度。
2.最窄的字段放在鍵的左邊
3.避免file sort排序,臨時表和表掃描
疑惑:重複數據多的字段是否有必要建索引。
舉例:
/* 評論表 */
CREATE TABLE `t_comment`
(
`CID` int(6) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`DYNAMIC_ID` varchar(6) DEFAULT NULL COMMENT '動態ID',
`UID` varchar(6) DEFAULT NULL COMMENT '發佈評論用戶ID',
`RID` varchar(6) DEFAULT NULL COMMENT '回覆用戶ID',
`CONTENT` varchar(200) DEFAULT NULL COMMENT '評論內容',
`CREATE_TIME` datetime DEFAULT NULL COMMENT '發佈時間',
`STATE` char(2) DEFAULT 0 COMMENT '評論狀態0正常 1失效',
PRIMARY KEY (`CID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='評論表';
建立 動態ID+用戶ID+評論狀態 聯合索引
查詢效率確實有所提高。
但是評論表update操作會很頻繁,索引列多會導致索引重構變慢。
應儘量減少查詢字段,將查詢負擔由緩存分擔。