ВЫБЕРИТЕ с 9 столбцами в WHERE или GROUP BY. Есть ли лучший способ индексировать несколько столбцов, чем составной индекс почти для каждой перестановки? - PullRequest
0 голосов
/ 22 января 2020

У меня есть 9 столбцов в таблице с 500 миллионами строк, в которых я буду выполнять запросы SELECT, и все столбцы могут быть или не быть в WHERE или GROUP BY.

Например: Столбцы -> (A, B, C, D, E, F, I, J, K) query ->

SELECT * 
FROM table WHERE A = 'x' AND J = 'y' GROUP BY B, E, K

Каков наилучший способ индексации и оптимизации базы данных? Нужно ли делать индекс по нескольким столбцам (составной индекс) для каждой перестановки столбцов?

Для 3 столбцов, которые я знаю, я мог бы сделать: (a, b, c), (b, c ), (c), (a, c), но как насчет 9 столбцов?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Вы не можете достичь желаемой цели. Некоторые возможные альтернативы:

  • Узнайте, какие столбцы наиболее часто используются; затем составьте до 10 индексов с 3 столбцами в каждом. Если вы помогаете наиболее распространенным комбинациям, то это может быть "достаточно хорошо".

  • Просмотрите MariaDB с помощью "Columnstore".

  • Посмотрите в пакеты дополнений.

0 голосов
/ 22 января 2020

Во-первых, select * не подходит для group by. К счастью, MySQL больше не разрешает этот синтаксис (по умолчанию).

Если вы намереваетесь:

SELECT B, E, K
FROM table
WHERE A = 'x' AND J = 'y'
GROUP BY B, E, K;

Тогда лучший индекс находится на (A, J, B, E, K);

...