bigue 0 Denunciar post Postado Julho 6, 2011 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
Caio Cardoso 0 Denunciar post Postado Julho 7, 2011 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