多列索引

来源:互联网 发布:linux mv命令 编辑:程序博客网 时间:2024/06/10 05:12

索引可以创建在两列或者多列上。

假设存在tbinvestrecord投资记录表,通过限定投资会员编号mid(member id)和投资项目编号pid(project id)来筛选符合条件的记录:

select * from tbinvestrecord where mid = 117 and pid = 41;

对应的执行计划:
这里写图片描述

为其加上一个多列索引:

alter table tbinvestrecord add index pid_mid (pid,mid);

再来看执行计划:

这里写图片描述

可见使用pid_mid索引后,估计读取的行数减少。

现在再创建一个索引,包含的字段还是pid和mid,只是把顺序调换一下:

alter table tbinvestrecord add index mid_pid (mid,pid);

再次查看执行计划:
这里写图片描述

为什么会选择pid_mid,而不是mid_pid?

对比一下pid和mid这两列的选择性值:
这里写图片描述

这里写图片描述

可见pid的唯一值更多,选择性更好,所以把pid放在最左侧。

通常情况下,在不考虑排序,而是单纯的用where限定筛选条件时,把选择性好的一列放在最左侧是个不错的选择。

参考资料:
《Effective MySQL之SQL语句最优化》

0 0
原创粉丝点击