Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Carregando comentários...