Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bigue

Tabela e view

Recommended Posts

Seguinte, tenho uma tabela com informações do usuário e criei uma view para ir organizando informações gerais baseadas em outras tabelas, como por exemplo o número de comentários que cada usuário fez.

 

TABELA DE USUÁRIOS:

CREATE TABLE IF NOT EXISTS `db`.`user` (

`id_user` INT UNSIGNED NOT NULL AUTO_INCREMENT ,

`nome_completo` VARCHAR(200) NOT NULL ,

PRIMARY KEY (`id_user`) ,

ENGINE = InnoDB

 

TABELA DE COMENTÁRIOS:

CREATE TABLE IF NOT EXISTS `db`.`comentario` (

`id_comentario` INT UNSIGNED NOT NULL AUTO_INCREMENT ,

`id_user` INT UNSIGNED NOT NULL ,

`comentario` TEXT NOT NULL ,

`data_comentario` DATETIME NOT NULL ,

PRIMARY KEY (`id_comentario`) ,

INDEX `idx_id_user` (`id_user` ASC) ,

CONSTRAINT `comentario_ibfk_1`

FOREIGN KEY (`id_user` )

REFERENCES `db`.`user` (`id_user` )

ON DELETE CASCADE

ON UPDATE CASCADE)

ENGINE = InnoDB

 

VIEW DO USUÁRIO:

USE `db`;

CREATE OR REPLACE VIEW `db`.`visao_user` AS

SELECT u.id_user,

COUNT(DISTINCT c.id_comentario) AS total_comentarios

FROM user u

INNER JOIN comentario c ON c.id_user = u.id_user

GROUP BY u.id_user

 

SQL CONSULTA QUE ESTÁ DEMORANDO:

SELECT u.id_user, u.nome_completo, vu.total_comentarios

FROM user u

INNER JOIN visao_user vu ON vu.id_user = u.id_user

GROUP BY u.id_user ORDER BY u.nome_completo ASC LIMIT 0, 30

 

Minha tabela de usuários hoje possui pouco mais de 200 mil registros e quando realizo uma consulta para retornar alguns usuários, o tempo de espera é muito grande. Gostaria de algumas dicas de como devo fazer para melhorar essa questão de tempo nas consultas.

 

Em diversos momentos vou precisar ficar mostrando a qtd de comentários, avaliações, indicações, etc ... fazer uma view onde tudo isso pode ser localizado através do 'id' é a melhor opção, ou existe alguma outra alternativa mais viável.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo,

 

na primeira parte reveja seus indices,

vi que você não criou indice na talela USER e na COMENTARIO você criou, porém, como ASC, isto não é interessante,

crie o indice desta forma somente se for utilizar.

 

Eu recomendaria criar o indice na tabela USER, remover e recriar o indice da tabela comentarios sem o ASC

e na view você ja adicionar a coluna com o nome completo do usuario assim você terá 1 querie a menos para executar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.