Ir para conteúdo
Fórum Script Brasil
  • 0

Tem um jeito melhor de fazer isto?


jose.rob.jr

Pergunta

CREATE TEMPORARY TABLE locais(
	`local` VARCHAR(255) PRIMARY KEY
);
CREATE TEMPORARY TABLE ids(
	`id` VARCHAR(255) PRIMARY KEY
);
CREATE TEMPORARY TABLE contagem(
	`id` INT PRIMARY KEY AUTO_INCREMENT,
	`local` VARCHAR(255) NOT NULL,
	`localid` INT NULL,
	`count` BIGINT NOT NULL
);
INSERT INTO locais SELECT DISTINCT(`local`) FROM comentarios WHERE userid=1;
INSERT INTO ids SELECT DISTINCT(`localid`) FROM comentarios WHERE userid=1;
INSERT INTO contagem(local,localid) SELECT locais.local, ids.id FROM locais,ids,comentarios WHERE comentarios.local=locais.local AND comentarios.localid=ids.id;
UPDATE contagem SET contagem.`count`=
	(SELECT COUNT(*) FROM comentarios WHERE comentarios.local=contagem.local AND comentarios.localid=contagem.localid AND comentarios.userid=1);
SELECT `local`,localid,MAX(contagem.`count`) FROM contagem GROUP BY `count` ORDER BY `count` DESC LIMIT 1  ;

Deixei o userid=1 como exemplo...

Isto ficou pesado... o que eu posso fazer pra ficar melhorar o desempenho? :unsure:

Editado por jose.rob.jr
Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'jose.rob.jr'

Você disse:

...Isto ficou pesado... o que eu posso fazer pra ficar melhorar o desempenho?
Ficou lento porque faltaram alguns índices. A falta de índices obriga o MySQL varrer toda a tabela para separar os registros que coincidem com o que você está procurando. Isto é conhecido como TABLE SCAN.

Inclua índices para os atributos: userid na tabela comentarios; local na tabela comentarios; local na tabela locais; localid na tabela comentarios; id na tabela ids; e count na tabela contagem.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...