MYSQL INDEX FOR多个列组合?

时间:2018-02-28 10:44:13

标签: mysql sql indexing

请帮助制作Mysql索引对于多个条件示例

Select id from table_name where col1='' and col2='' and col3='' and col4=''
and col5=''and col6='';

现在条件的组合数量,前两列col1col2已修复;其他组合IS: -

where col1='' and col2='' and col3='' ;

where col1='' and col2='' and col3='' and col4='';

where col1='' and col2='' and col3='' and col4=''and col5='';

where col1='' and col2='' and col5=''and col6='';

where col1='' and col2='' and col4=''and col5=''and col6='';

where col1='' and col2='' and col4='' and col6=''

where col1='' and col2='' and col4='';

where col1='' and col2='' and col5='';

where col1='' and col2='' and col6='';

where col1='' and col2='' and col3='' and col5='';

我只有一个索引

create INDEX `allpair` ON TABLE_NAME (col1,col2,col3,col4,col5,col6);

请帮助根据所有组合来制作适当的索引。提前致谢。

1 个答案:

答案 0 :(得分:3)

以下列组合将涵盖您的所有查询(为简单起见,我删除了col前缀):

 1  2  3 

 1  2  3  4

 1  2  3  4  5

 1  2  5  6

 1  2  4  5  6

 1  2  4  6

 1  2  4

 1  2  5

 1  2  6

 1  2  3  5

但是,有些索引涵盖了多个查询。例如,索引1 2 3 4 5已涵盖1 2 31 2 3 4,因为这些列包含在1 2 3 4 5索引的最左侧部分。

因此,您需要的列组合将从原始列表中删除最左侧包含在较大元素中的元素:

 1  2  3  4  5

 1  2  5  6

 1  2  4  5  6

 1  2  4  6

 1  2  6

 1  2  3  5