Gjest Slettet-i6XWZnn85h Skrevet 12. september 2006 Del Skrevet 12. september 2006 CREATE TABLE `db_hash` ( `c_word` tinytext NOT NULL, `c_md5` tinytext NOT NULL, PRIMARY KEY (`c_word`(8),`c_md5`(32)), KEY `INDEX` (`c_md5`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; er dette en bra måte å gjøre det på for å oppnå mest ytelse å fart av en mysql database? Lenke til kommentar
roac Skrevet 12. september 2006 Del Skrevet 12. september 2006 CREATE TABLE `db_hash` ( `c_word` tinytext NOT NULL, `c_md5` tinytext NOT NULL, PRIMARY KEY (`c_word`(8),`c_md5`(32)), KEY `INDEX` (`c_md5`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; er dette en bra måte å gjøre det på for å oppnå mest ytelse å fart av en mysql database? 6846970[/snapback] Uten at jeg kjenner til hva KEY gjør (men det ser ut som om den lager en indeks) så vil jeg klart si nei. Du har både en sammensatt nøkkel på de to kolonnene (derved er de også indeksert), og en ekstra indeks på den ene kolonnen. Sistnevnte vil da være overflødig her siden du neppe er interessert i bare å hente ut MD5-sjekksummen. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 13. september 2006 Del Skrevet 13. september 2006 ja er intressert i å hente ut begge kolummene.. hva må endres? Lenke til kommentar
roac Skrevet 13. september 2006 Del Skrevet 13. september 2006 ja er intressert i å hente ut begge kolummene.. hva må endres? 6853620[/snapback] Hvis jeg har forstått koden din riktig så kan du fjerne dette: KEY `INDEX` (`c_md5`(32)) Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 13. september 2006 Del Skrevet 13. september 2006 okei.. då har eg maks ytelse? Lenke til kommentar
Loomy Skrevet 13. september 2006 Del Skrevet 13. september 2006 I en tabell med to kolonner er det begrenset hvor ikke-maks ytelsen kan være. Tipper du er rimelig safe i dette tilfellet Lenke til kommentar
roac Skrevet 13. september 2006 Del Skrevet 13. september 2006 I en tabell med to kolonner er det begrenset hvor ikke-maks ytelsen kan være. Tipper du er rimelig safe i dette tilfellet 6856079[/snapback] Det er jo det samme uansett hvor mange kolonner du har, det er i praksis størrelsen på tabellen i kombinasjon med andel unike rader som avgjør. Ved stor andel av unike verdier er en indeks hensiktsmessig, vel liten andel lønner det seg ikke med index og databaseservere vil typisk falle tilbake til table scan uansett. (Jeg håper inderlig det er tilfelle for MySQL også). Mao: det er fult mulig å få svært grisete worst-case for en tabell med bare to kolonner også, det må bare mange rader til. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 14. september 2006 Del Skrevet 14. september 2006 men da trenger eg ikkje indexen? Lenke til kommentar
roac Skrevet 14. september 2006 Del Skrevet 14. september 2006 men da trenger eg ikkje indexen? 6860381[/snapback] Nei, du har jo allerede indeksert begge kolonnene siden du har en sammensatt primærnøkkel. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 14. september 2006 Del Skrevet 14. september 2006 okei.. men å er den egentlig godt for? Lenke til kommentar
roac Skrevet 14. september 2006 Del Skrevet 14. september 2006 okei.. men å er den egentlig godt for? 6863527[/snapback] Indeksen? Raskere oppslag i databasen. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 15. september 2006 Del Skrevet 15. september 2006 okei.. det tok 2 timer å fjerne den indexen.. før når eg hadde den så tok eit oppslag 0,1 sek.. nå tar det så lang tid at eg ikkje årke å vente.. Lenke til kommentar
roac Skrevet 15. september 2006 Del Skrevet 15. september 2006 okei.. det tok 2 timer å fjerne den indexen.. før når eg hadde den så tok eit oppslag 0,1 sek.. nå tar det så lang tid at eg ikkje årke å vente.. 6866555[/snapback] Da får jeg bare beklage. Jeg har ikke allverdens tid til å søke nå, men søk på google tyder på at MySQL av en eller annen sær grunn kun indekserer den første kolonnen i en sammensatt primærnøkkel. Hvorfor i all vide verden det i så fall er tilfelle aner jeg ikke, og det hadde vært kjempefint om noen kunne bekrefte at det var tilfelle. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 15. september 2006 Del Skrevet 15. september 2006 ja. men eg tru det kan hjelpe å fjerne primær når databasen er ferdig. har ca 25 mill rader så vil ikkje herje for mye med databasen. Lenke til kommentar
roac Skrevet 16. september 2006 Del Skrevet 16. september 2006 ja. men eg tru det kan hjelpe å fjerne primær når databasen er ferdig. har ca 25 mill rader så vil ikkje herje for mye med databasen. 6870895[/snapback] Hvis du er garantert å ikke skulle bruke fremmednøkler mot tabellen så kan nok det lønne seg ja. Forøvrig så ville det sikkert vært en del å hente på å få lagret hash i tallformat, men det kan medføre behov for større omskrivinger. Lenke til kommentar
Gjest Slettet-i6XWZnn85h Skrevet 18. september 2006 Del Skrevet 18. september 2006 fungerte fett det! Showing rows 0 - 0 (1 total, Query took 0.0056 sec) Lenke til kommentar
Ueland Skrevet 22. september 2006 Del Skrevet 22. september 2006 CREATE TABLE `db_hash` ( `c_word` tinytext NOT NULL, `c_md5` tinytext NOT NULL, PRIMARY KEY (`c_word`(8),`c_md5`(32)), KEY `INDEX` (`c_md5`(32)) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; er dette en bra måte å gjøre det på for å oppnå mest ytelse å fart av en mysql database? 6846970[/snapback] Enkelt sagt, du skal ha en indeks som inneholder de feltene du slår opp og/eller sorterer på, og trenger ikke så mye mer enn det, så funker det fint. Leksjon 2 er forøvrig å teste lokalt og ikke "gjette" deg frem på et produksjonssystem. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå