一、创建组合索引 -- 对于大量数据的表,使用联合索引会大大的减少开销!
为 table 中的 name、age、gender字段创建组合索引 idx_name_age_gender:
ALTER TABLE `table_name` ADD INDEX (`name`,`age`,`gender`);
索引 idx_name_age_gender 相当于创建了三个索引,分别为 idx_name(单列索引)、idx_name_age(组合索引)、idx_name_age_gender(组合索引)
二、使用规则(最佳左匹配规则)
命中索引的查询如下:
where name = ?;
where name = ? and age = ?;
where name = ? and gender = ?
where name = ? and age = ? and gender = ?;
where name = ? and gender = ? and age = ?;
where age = ? and name = ? and gender = ?;
where age = ? and gender = ? and name = ?;
where gender = ? and name= ? and age = ?;
where gender = ? and age = ? and name = ?;
三、覆盖索引
select name, age, gender from tbl where name = ? and age = ?
当执行上面这条SQL的时候,MySQL可以在不进行回表的情况下直接通过遍历索引获取数据,较少了磁盘 IO 次数,所以覆盖索引也是一种主要的性能优化手段。