Código pho não executa em banco de dados grande
Tenho uma tabela chamada "item" com os seguintes campos: id, name, active. Nela tem cadastrado vários itens.
No campo "active" eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo:
1, casa, S
2, mesa, S
3, cama, S
4, moto S
5, rádio
O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo active.
E outra tabela chamada "product" com os seguintes campos (id, name) com os seguintes registros:
1, Produto A
2, Produto B
3, Produto C
E uma terceira tabela chamada "product_item" com os seguintes campos (productID, itemID). No campo productID eu coloco o id de um produto da tabela "product" e no campo "itemID" eu coloco o id do produto da tabela "item". Exemplo:
1, 1
1, 3
1, 4
2, 3
2, 4
Sendo assim o produto A da tabela 'product" comtem os itens casa, cama e moto.
Eu preciso fazer uma busca da seguinte maneira:
Eu escolho um registro da tabela "item", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "product" que contenham a palavra "casa" e que os demais itens estejam ativos no siste. Ou seja, que contenham um "S" no campo "active"
Eu consegui fazer isso da seguinte maneira:
SELECT P.id, P.name, GROUP_CONCAT(I.name ORDER BY I.name) AS items
FROM product P
JOIN product_item PI ON P.id = PI.productID
JOIN item I ON I.id = PI.itemID AND I.active = 'S'
WHERE P.id NOT IN (
SELECT PI.productID
FROM product_item PI
JOIN item I ON I.id = PI.itemID
WHERE I.active IS NULL
)AND P.id IN (
SELECT PI.productID
FROM product_item PI
JOIN item I ON I.id = PI.itemID
WHERE I.name = 'mesa'
)
GROUP BY P.id, P.name;
O problema que eu estou tendo é o seguinte:
Quando eu jogo este código para o banco de dados onde eu já tenho os registros cadastrado o php fica lendo uma eternidade e não lista os produtos.
Usando código no banco de dados que eu fiz para testes ele funciona perfeitamente pois nele tem poucos registros.
No banco de dados principal a tabela "item" tem 11.196 registros. A tabela "product" tem 88.214 registros e a tabela "product_item" tem 518.378 registros.
Eu acredito que, devido o banco de dados ser muito grande, ele não consegue listar.
Alguém sabe de algum meio de resolver isso?Discussão (4)
Carregando comentários...