Estou criando um sistema onde terá uma tabela de notícias ou blog, uma tabela de loja virtual e uma tabela de eventos, entre mais outras 50 tabelas que não vem ao caso.
Estas 3 tabelas tem um campo chamado tagscodes
do tipo text
, onde separo cada tag por virgula.
Atualmente eu estou fazendo a consulta assim:
SELECT 'eventos' AS `tabela`, `eventos`.`codempresa` as `coditem`, `eventos`.`tagscodes` FROM `system_eventos` as `eventos` WHERE `eventos`.`tagscodes` LIKE '%feminino%' UNION SELECT 'blog' AS `tabela`, `blog`.`codpost` as `coditem`, `blog`.`tagscodes` FROM `system_blog_posts` as `blog` WHERE `blog`.`tagscodes` LIKE '%feminino%' UNION SELECT 'shop' AS `tabela`, `shop`.`codprodutos` as `coditem`, `shop`.`tagscodes` FROM `system_shop_produtos` as `shop` WHERE `shop`.`tagscodes` LIKE '%feminino%'
A minha dúvida é sobre performance e velocidade. Por enquanto eu tenho poucos cadastros de testes, e lógico que a consulta não demora nada. Mas cada tabela dessa tem mais de 20 campos, e terá centenas de milhares de registros, o que ficará pesadíssimo.
Será que não vou ter problemas futuros em fazer busca e ter muita demora na consulta?
Estou aprendendo a utilizar JSON
e penso em mudar as tabelas para JSON em vez de texto separado por virgula.
Depois alterando o WHERE
de cada consulta para:
SELECT ... WHERE JSON_CONTAINS(`eventos`.`tagscodes`, '["feminino"]') UNION SELECT ... WHERE JSON_CONTAINS(`blog`.`tagscodes`, '["feminino"]') UNION SELECT ... WHERE JSON_CONTAINS(`shop`.`tagscodes`, '["feminino"]')
Ainda não alterei as tabelas e nem sei se dará certo.
Alguém que trabalha com tabelas pesadas, poderia me dar uma luz em qual seria a melhor solução em questão de performance e velocidade para este caso??
Gostaria de preparar agora, para não ter problemas futuro e ter que editar milhares de registros.
Agradeço a atenção de todos. Espero ter sido clara na minha pergunta. Fiz outra pergunta outro dia, e mesmo detalhando bem, disseram que era muito ampla. Creio que estou sendo bem objetiva, e gostaria mesmoooo da ajuda de algum profissional que esteja acostumado com banco de dados.
Obrigada!!