pedrosorio Posted October 1, 2009 at 06:49 PM Report Share #289556 Posted October 1, 2009 at 06:49 PM 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 More sharing options...
bruno1234 Posted October 1, 2009 at 07:38 PM Report Share #289560 Posted October 1, 2009 at 07:38 PM 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 More sharing options...
pedrosorio Posted October 1, 2009 at 07:42 PM Author Report Share #289562 Posted October 1, 2009 at 07:42 PM 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 More sharing options...
bruno1234 Posted October 1, 2009 at 07:47 PM Report Share #289564 Posted October 1, 2009 at 07:47 PM 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 More sharing options...
pedrosorio Posted October 3, 2009 at 02:54 PM Author Report Share #289802 Posted October 3, 2009 at 02:54 PM Encontrei a resposta para MySQL surpreendentemente no manual do MySQL xD Fica aqui para quem tiver a mesma dúvida: http://dev.mysql.com/doc/refman/5.0/en/searching-on-two-keys.html Não respondo a dúvidas por mensagem. Link to comment Share on other sites More sharing options...
M6 Posted February 24, 2010 at 03:59 PM Report Share #313205 Posted February 24, 2010 at 03:59 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now