关于mysql索引的创建

zilaishuichina 2011-05-16 08:27:27
假定现有一张表
包括c1,c2,c3,c4,c5这5列(或者更多),
列类型是int或char中的一种,就是说列类型只包含这两种,不涉及2进制等其他列类型,
已知对该表的查询需求是这5列都有可能涉及到,
即where条件是这5列的排列组合,且为and关联,
但是可以确定这5列在where中的顺序为c1,c2,c3,c4,c5
即如果c1列作为查询条件使用的话,必定排在c2,c3,c4,c5之前
如果c2列作为查询条件使用的话,必定排在c3,c4,c5之前
例如,where条件可能为:
where c1 = ? and c2 = ? and c4 = ? and c5 = ?;
或where c3 = ? and c4 = ? and c5 = ?;
或where c1 = ? and c4 = ?;
或where c2 = ? and c3 = ? and c5 = ?;
等等

我想问的是
对于这样的查询需求
建立索引的话,应该是单独对每列建立单列索引,总共建立5个单列索引,对程序整体的效率提高较大,
还是按照一定的规则建立若干个多列索引,对程序整体的效率提高较大(如果是这样,该怎么建)?
...全文
72 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
taseaa 2011-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]

SQL code
where c1 = ? and c2 = ? and c4 = ? and c5 = ?;
where c3 = ? and c4 = ? and c5 = ?;
where c1 = ? and c4 = ?;
where c2 = ? an……
[/Quote]
5:出现3次
4:出现3次。
其它各两次。
(4,5,1)
(5,3,3)
全部复该到。
zuoxingyu 2011-05-17
  • 打赏
  • 举报
回复
做5个单列索引吧。

在查询的时候,如果可能用到多个多列索引的时候,MYSQL会自动进行索引合并,效率很好。
加油馒头 2011-05-16
  • 打赏
  • 举报
回复
经常要查询到的列建上索引,相应的付出空间也较大
ACMAIN_CHM 2011-05-16
  • 打赏
  • 举报
回复
既然无所谓,那就泛泛而答吧。


where c1 = ? and c2 = ? and c4 = ? and c5 = ?;
where c3 = ? and c4 = ? and c5 = ?;
where c1 = ? and c4 = ?;
where c2 = ? and c3 = ? and c5 = ?;


创建如下索引

(c1,c2,,c4,c5)
(c4,c5)
(c2)


数据库优化需要大量的分析,没有分析统计的基础上谈不上什么优化。 不麻烦楼主了。
zilaishuichina 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 acmain_chm 的回复:]
引用记录为百万数量级,
列的值比如说吧
有1列为 取值1-255均匀分布
有1列为 取值0-9均匀分布
有1列为 散列-1,0,3,7,58,99 就这几个值均匀分布
还有2列为字符串

如果是这样该怎么做呢?

哪个是C1 ? 哪个是C2 ?????

楼主能不能一次把问题讲清楚,变得回答问题的人要问个不停。
[/Quote]

哦 c1 是 取值1-255均匀分布
c2 取值0-9均匀分布
c3 散列-1,0,3,7,58,99
c4,c5为 字符串

只是我感觉 哪个是c1哪个是c2这个无所谓啊 我也只是举个例子
而且这个顺序是可以按照自己需要,怎么方便怎么安排啊
因为我觉得这个顺序只涉及到使用索引时是否可以用最左子集
所以当然是怎么方便怎么安排啊
rucypli 2011-05-16
  • 打赏
  • 举报
回复
如果每一列散列度比较高的话,每一列建立索引比较好
ACMAIN_CHM 2011-05-16
  • 打赏
  • 举报
回复
[Quote]记录为百万数量级,
列的值比如说吧
有1列为 取值1-255均匀分布
有1列为 取值0-9均匀分布
有1列为 散列-1,0,3,7,58,99 就这几个值均匀分布
还有2列为字符串

如果是这样该怎么做呢?[/Quote]

哪个是C1 ? 哪个是C2 ?????

楼主能不能一次把问题讲清楚,变得回答问题的人要问个不停。
zilaishuichina 2011-05-16
  • 打赏
  • 举报
回复
记录为百万数量级,
列的值比如说吧
有1列为 取值1-255均匀分布
有1列为 取值0-9均匀分布
有1列为 散列-1,0,3,7,58,99 就这几个值均匀分布
还有2列为字符串

如果是这样该怎么做呢?
ACMAIN_CHM 2011-05-16
  • 打赏
  • 举报
回复
[Quote]值分布均匀,可以理解为各种情况的出现概率相等,[/Quote]分布情况并不是只回答均匀分布就行了。 另外这个字段中有多少不同的值?
一共有多少记录?
zilaishuichina 2011-05-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 acmain_chm 的回复:]
SQL code
where c1 = ? and c2 = ? and c4 = ? and c5 = ?;
where c3 = ? and c4 = ? and c5 = ?;
where c1 = ? and c4 = ?;
where c2 = ? ……
[/Quote]

值分布均匀,可以理解为各种情况的出现概率相等,
不考虑由于某种情况出现的概率比较大,而针对该种情况做特殊处理
ACMAIN_CHM 2011-05-16
  • 打赏
  • 举报
回复
where c1 = ? and c2 = ? and            c4 = ? and c5 = ?;
where c3 = ? and c4 = ? and c5 = ?;
where c1 = ? and c4 = ?;
where c2 = ? and c3 = ? and c5 = ?;


并无特殊的排列,只能根据需要创建多个索引,另外还要分析你的各个字段中值的分布。 请描述一下你各字段中值的分布情况。

  • 打赏
  • 举报
回复
我有点晕,不过顶哥一下

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧