Melhorando o desempenho de seu banco de dados do Opencart

O problema com o banco de dados do Opencart

Nesse período de mais de dois anos que venho trabalhando diariamente com o Opencart, consegui conhecer algumas de suas vantagens e desvantagens, e posso dizer com tranquilidade que um dos maiores problemas da plataforma está em seu banco de dados, mas esse problema pode ser minimizado aplicando algumas pequenas alterações no banco.

Vamos a elas?

Índices, sim eles existem

Por incrível que pareça, o pessoal que desenvolveu o Opencart não teve muita preocupação com a criação de índices, e a grande maioria das tabelas possui apenas um único em índice que contempla apenas a chave primária.

Quem já lidou com grandes bancos de dados sabe da importância dessa prática e o quanto ela reduz o tempo das consultas.

Você pode criar índices em todas as tabelas do banco de dados, mas vou listar aqui as que julgo mais importantes e o comando para você criar os índices:

Tabela de Produtos (product)

# Índice para fabricantes

1
CREATE INDEX manufacturer ON `oc_product` (`manufacturer_id`)

# Índice para status de estoque

1
CREATE INDEX stock_status ON `oc_product` (`stock_status_id`)

# Índice para o status

1
CREATE INDEX status ON `oc_product` (`status`)

Tabela de Pedidos (order)

# Índice para loja

1
CREATE INDEX store ON `oc_order` (`store_id`)

# Índice para cliente

1
CREATE INDEX customer ON `oc_order` (`customer_id`)

Chaves estrangeiras, elas podem ajudar

Outra boa prática é a criação de chaves estrangeira e que tenham remoção de dados em cascata. Dessa forma, se você remover um produto diretamente no banco, todos os dados vinculados ao produto em outras tabelas serão também removidos.

Esse é um processo longo e um pouco mais complexo, pois envolve mexer em diversas tabelas, no caso de produto são 16 tabelas vinculadas, mas pode ter certeza de que o esforço vai valer a pena, pois sua base de dados vai ficar sempre homogênea.

Veja abaixo o exemplo da criação da chave na tabela product_to_category, que é responsável por vincular os produtos as categorias do sistema.

O primeiro passo é alterar as tabelas envolvidas pra o tipo Innodb:

1
ALTER TABLE `product` ENGINE=InnoDB ALTER TABLE `product_to_category` ENGINE=InnoDB

# Cria a chave estrangeira com a tabela produto

1
ALTER TABLE `oc_product_to_category` ADD CONSTRAINT `product_id` FOREIGN KEY ( `product_id` ) REFERENCES `oc_product` ( `product_id` ) ON DELETE CASCADE ON UPDATE CASCADE ;

Não altere o banco!

Por fim, a última dica que eu tenho sobre melhorar o desempenho do banco de dados é: não altere o banco de dados, e quando falo em alterar estou falando de criar campos, renomear colunas etc.

Fazendo isso, você pode quebrar referências e prejudicar e muito sua loja Opencart, além de dificultar e muito o processo de atualização.

Se precisar crie novas tabelas, mas não altere as tabelas do sistema.

É isso, pessoal, essas foram algumas dicas que podem melhorar o desempenho da base de dados do Opencart e, consequentemente, aumentar a velocidade e os resultados de sua loja Opencart.

Fonte: http://imasters.com.br/banco-de-dados/melhorando-o-desempenho-de-seu-banco-de-dados-do-opencart/