Gå til innhold

Oppnå mest mulig hastighet på en mysql database


Gjest Slettet-i6XWZnn85h

Anbefalte innlegg

Gjest Slettet-i6XWZnn85h

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
Videoannonse
Annonse
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
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

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
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

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
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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...