Banco de Dados

10 set, 2013

Melhorando o desempenho de seu banco de dados do Opencart

Publicidade

Oi pessoal tudo bom? Hoje é dia de colocar a mão na massa, ou melhor, no código, e como ultimamente tenho falado bastante do Opencart, vou continuar no assunto, mas antes leia alguns dos artigos que já fiz sobre a plataforma.

MySQL

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

[sql]

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

[/sql]

# Índice para status de estoque

[sql]

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

[/sql]

# Índice para o status

[sql]

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

[/sql]

Tabela de Pedidos (order)

# Índice para loja

[sql]

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

[/sql]

# Índice para cliente

[sql]

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

[/sql]

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:

[sql]

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

[/sql]

# Cria a chave estrangeira com a tabela produto

[sql]

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 ;

[/sql]

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.

Até a próxima!