12
返回列表 发新帖
楼主: mysqldbd

[原创] MySQL的索引建立顺序与where条件后面的and顺序问题?

[复制链接]
论坛徽章:
19
季节之章:冬
日期:2009-01-13 11:30:57季节之章:春
日期:2009-02-09 13:40:00季节之章:夏
日期:2009-06-08 13:44:20季节之章:秋
日期:2009-08-18 20:27:35
11#
发表于 2011-5-2 16:32 | 只看该作者
原帖由 Steven1981 于 2011-5-1 22:59 发表
楼上的讲反了吧。 呵呵。
索引的顺序很重要。WHERE后面的条件顺序不重要。(MYSQL会自动匹配)


嗯嗯,没表达好,我就是说的这个意思

使用道具 举报

回复
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
12#
发表于 2011-5-23 18:09 | 只看该作者
原帖由 mysqldbd 于 2011-4-20 09:49 发表
有一个表A 哟字段c1,c2,c3,c4,c5、、、、、、c14,c15、、、、、,总数据量在1000W左右。MySQL版本是5.5.8,存储引擎是Innodb。

经常作为查询条件的有c1,c2,c5,c14,c15,有可能是其中的3个字段作为查询条件,也有可能是4个字段作为查询条件,也有可能是5个字段作为查询条件。

问下,这样的业务场景,如何建立索引?

我初步的想法是
1,第一个索引:按照c1,c2,c5,c14,c15的顺序建立索引,在写sql的时候,后面的where条件是 where c1=pv and c2=pv  and c5=pv  and c14=pv  anc c15=pv ,pv为条件值。

2,第二个索引:按照c2,c5,c15的顺序建立索引,在写sql的时候,后面的where条件是:where c2=pv  and c5=pv and c15=pv ,pv为条件值。

3,第三个索引:按照c1,c5,c14,c15的顺序建立索引,在写sql的时候,后面的where条件是 where c1=pv and c5=pv  and c14=pv  anc c15=pv ,pv为条件值。

不知道我的实现方案是不是比较恰当,大家给点建议,谢谢!




MySQL中创建及优化索引组织结构的思路,链接地址:
http://www.mysqlops.com/2011/05/ ... 80%9D%E8%B7%AF.html

使用道具 举报

回复
论坛徽章:
14
2011新春纪念徽章
日期:2011-04-02 17:01:062013年新春福章
日期:2013-02-25 14:51:24复活蛋
日期:2012-12-06 19:27:46ITPUB 11周年纪念徽章
日期:2012-10-09 18:16:00ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42紫蛋头
日期:2012-03-13 16:37:18灰彻蛋
日期:2012-02-06 14:20:122012新春纪念徽章
日期:2012-01-04 11:57:56灰彻蛋
日期:2011-12-26 14:20:13茶鸡蛋
日期:2011-12-20 15:00:13
13#
发表于 2011-5-25 11:35 | 只看该作者
刚刚测试了下
index_1(c1,c2)
explain select * from t_1 where c1='1' and c2='1';
explain select * from t_1 where c2='2' and c1='2';
上面两个查询都可以使用到index_1,说明mysql会自动优化where中的条件顺序
手册中的原话:对于联接内的每个表,构造一个更简单的WHERE以便更快地对表进行WHERE计算并且也尽快跳过记录。

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2011-5-28 21:23 | 只看该作者
原帖由 mysqldbd 于 2011-4-20 09:49 发表
有一个表A 哟字段c1,c2,c3,c4,c5、、、、、、c14,c15、、、、、,总数据量在1000W左右。MySQL版本是5.5.8,存储引擎是Innodb。

经常作为查询条件的有c1,c2,c5,c14,c15,有可能是其中的3个字段作为查询条件,也有可能是4个字段作为查询条件,也有可能是5个字段作为查询条件。

问下,这样的业务场景,如何建立索引?

我初步的想法是
1,第一个索引:按照c1,c2,c5,c14,c15的顺序建立索引,在写sql的时候,后面的where条件是 where c1=pv and c2=pv  and c5=pv  and c14=pv  anc c15=pv ,pv为条件值。

2,第二个索引:按照c2,c5,c15的顺序建立索引,在写sql的时候,后面的where条件是:where c2=pv  and c5=pv and c15=pv ,pv为条件值。

3,第三个索引:按照c1,c5,c14,c15的顺序建立索引,在写sql的时候,后面的where条件是 where c1=pv and c5=pv  and c14=pv  anc c15=pv ,pv为条件值。

不知道我的实现方案是不是比较恰当,大家给点建议,谢谢!


第一个索引一定是不需要的,
用 c5, c15, c1, c14能够同时给1、3两个语句使用。
至于是否需要索引2,取决于c5、c15的过滤效果。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表