Nunca encontrei uma boa maneira de indexar vários campos de uma linha como entradas de um índice ou simular esse recurso no MySQL.
O problema surge quando você tem campos funcionando como tags ou conceito similar. Ex.: nomes de campos como tag1, tag2, tag3. Para pesquisar linhas com uma tag específica rapidamente, é necessário ter 3 índices e fazer 3 consultas separadas da maneira mais básica e óbvia.
Existe alguma maneira de indexar esses 3 campos como entradas de um índice, permitindo apenas uma pesquisa.
ID tag1 tag2 tag3
-- ---- ---- ----
01 abc xyz bla
02 foo bar ble
03 xyz bla bar
index
abc -> 01
bar -> 02 03
bla -> 01 03
ble -> 02
foo -> 02
xyz -> 01 03
Ou existe alguma outra maneira de fazer isso de forma eficiente?
Se estou entendendo corretamente, esta consulta deve funcionar:
Dada esta estrutura de tabela:
Sempre que você tem um nome de campo numerado, você não normalizou suas tabelas. Em vez disso, provavelmente teria uma tabela de 'tag', que poderia então juntar-se a tudo o que estou marcando:
(com a chave primária sendo de várias colunas e havendo um índice adicional em qualquer que seja o segundo campo no índice de várias colunas)
Você sempre pode adicionar uma coluna 'ordem' se for necessário que as tags estejam em uma ordem específica.