Jump to content

MySQL Indexação


pedrosorio

Recommended Posts

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?

Não respondo a dúvidas por mensagem.

Link to comment
Share on other 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).

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other 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

Não respondo a dúvidas por mensagem.

Link to comment
Share on other 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.

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other sites

  • 4 months later...

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.

10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.