Пожалуйста, помогите сделать индекс Mysql. Для нескольких условий. Пример :
Select id from table_name where col1='' and col2='' and col3='' and col4=''
and col5=''and col6='';
Теперь количество комбинаций где условия, Первые два столбца col1
и col2
исправить; другие комбинации 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);
Пожалуйста, помогите составить то, что является надлежащим индексом для соответствия всем этим, где сочетаются. Заранее спасибо.
Следующие комбинации столбцов будут охватывать все ваши запросы (я просто удалил префикс 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 3
и 1 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
1 2 6
и вам нужно добавить индекс 1 2 6 5
, старый становится ненужным.
allpair
не будет охватывать все запросы в вашем списке. Если у вас есть составной индекс(col1, col2, col3)
, то только в тех случаях, когда предложения дляcol1
,(col1, col2)
или(col1, col2, col3)
будут использовать этот индекс.