Предположим, у вас есть таблица с id,a,b,c,d,e,f,g
примерно с 1 миллионом строк. Затем можно было сделать запрос с несколькими условиями WHERE ...AND...AND...etc
в нескольких комбинациях. Это, например, a AND b AND e
или a AND f AND g
или e AND f AND g
.Множественный или единственный составной индекс
Так что для учета всех комбинаций вам нужно было бы создать несколько составных индексов, но что, если a,b,c,d,e,f,g
имеют диапазон от [1,10], следовательно, нет нуля.
Может один просто сделать одно соединение за переменной начальной, так и a,b,c,d,e,f,g
b,a,c,d,e,f,g
и т.д .. и во время запроса сделать что-то вроде
#b and e have not been chosen
SELECT * FROM WHERE a=3 AND b!=0 AND c=4 AND d=5 AND e!=0 AND f=1 AND g=9
#I think you get the logic
Может ли такая процедура позволит MySQL по-прежнему использовать индекс соединения или сделать I действительно необходимо создать все возможные комбинации составных индексов.
В конечном итоге приведет к сокращению числа индексов до 7 вместо числа левых комбинаций, которая является-плюсом образом выше, чем 7.
Эта проблема иногда является симптомом отсутствия нормализации. – Strawberry
Это симуляция материализованного представления в mysql, следовательно, большое количество столбцов. – delmalki
У клубники есть нормализация, при условии, что ваши столбцы a-g имеют одинаковый контекст.Однако, если ваши данные представляют собой каждый столбец a-g, имеет свое нормализованное значение - например, в таблице годовых контрактов, с которой я работал. Корневая таблица имела ссылки на более чем 20 отдельных справочных справочных страниц, каждый из которых был нормализован по идентификатору. Если вы можете расширить более общий контекст a-g, мы могли бы предоставить более четкое разъяснение и внести свой вклад в вашу ситуацию. – DRapp