假定现有一张表
包括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个单列索引,对程序整体的效率提高较大,
还是按照一定的规则建立若干个多列索引,对程序整体的效率提高较大(如果是这样,该怎么建)?
包括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个单列索引,对程序整体的效率提高较大,
还是按照一定的规则建立若干个多列索引,对程序整体的效率提高较大(如果是这样,该怎么建)?
where c3 = ? and c4 = ? and c5 = ?;
where c1 = ? and c4 = ?;
where c2 = ? and c3 = ? and c5 = ?;并无特殊的排列,只能根据需要创建多个索引,另外还要分析你的各个字段中值的分布。 请描述一下你各字段中值的分布情况。
哦 c1 是 取值1-255均匀分布
c2 取值0-9均匀分布
c3 散列-1,0,3,7,58,99
c4,c5为 字符串只是我感觉 哪个是c1哪个是c2这个无所谓啊 我也只是举个例子
而且这个顺序是可以按照自己需要,怎么方便怎么安排啊
因为我觉得这个顺序只涉及到使用索引时是否可以用最左子集
所以当然是怎么方便怎么安排啊
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)
数据库优化需要大量的分析,没有分析统计的基础上谈不上什么优化。 不麻烦楼主了。