• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrosorio

MySQL Indexação

6 mensagens neste tópico

Aproveito já para dizer que os meus conhecimentos teóricos sobre bases de dados são praticamente nulos.

Imaginem um cenário em que tenho uma tabela com utilizadores (nome, mail, etc.) em que a chave primária é um ID que é incrementado de cada vez que um utilizador se inscreve.

Tenho uma outra tabela, chamemos-lhe de "interacções" em que cada entrada é uma interacção entre dois utilizadores. Tenho campos que descrevem a interacção, entre os quais ID1 e ID2, com os ID's dos utilizadores em questão.

Interessa-me conseguir rapidamente extrair todas as entradas em que participa um dado utilizador (i.e. em que o ID1 ou o ID2 é igual a um determinado valor), no entanto se utilizar ID1 como chave, continua a ser lento porque tem que procurar em todas as entradas para ver se ID2 tem um dado valor.

Há alguma técnica para acelerar a procura em dois campos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A chave primária tem por defeito um index clustered, e assim deve continuar.

Quanto ás outras chaves, se tens problemas de performance podes experimentar colocar indices da seguinte maneira:

A coluna com mais pesquisas deve ter um indice clustered (q deve ser ID1 e chave primária).

Se ainda assim for lento, experimenta meter um indice de 2 colunas (ID1 e ID2).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A chave primária tem por defeito um index clustered, e assim deve continuar.

Podes traduzir?

Quanto ás outras chaves, se tens problemas de performance podes experimentar colocar indices da seguinte maneira:

A coluna com mais pesquisas deve ter um indice clustered (q deve ser ID1 e chave primária).

Se ainda assim for lento, experimenta meter um indice de 2 colunas (ID1 e ID2).

Teoricamente vou ter o mesmo número de pesquisas em ID1 e ID2, como coloco um índice de duas colunas?

P.S.: Estou a usar o phpmyadmin

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A sintaxe para criar o indice não sei, só vendo na net. Nem tenho a certeza q seja possivel em MySql, mas penso q sim.

Um indice clustered é um indice q ordena a tabela na sua indexação, é mais rápido aceder aos dados assim.

O Non clustered não ordena. Tb é um conceito q n é comum a todas as bases de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tens problemas de performace, antes de meteres índices tentar reescrever as tuas queries de forma mais eficiente.

A minha experiência diz-me que numa percentagem significativa dos casos a lentidão vem de queries "mal escritas" que o SGBD optimizador não consegue optimizar grande coisa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora