日期:2014-05-16  浏览次数:20865 次

关于mysql索引的创建
假定现有一张表
包括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个单列索引,对程序整体的效率提高较大,
还是按照一定的规则建立若干个多列索引,对程序整体的效率提高较大(如果是这样,该怎么建)?


------解决方案--------------------
SQL code
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个单列索引吧。

在查询的时候,如果可能用到多个多列索引的时候,MYSQL会自动进行索引合并,效率很好。