Avatar billede dank Nybegynder
21. februar 2004 - 23:39 Der er 6 kommentarer og
3 løsninger

Mange eller få tabeller, hvad giver bedst performance

Jeg har en del data pr. bruger. hvad er smartest, at:

1: Have en tabel hvor alle brugere benytter samme tabel til "deling"

2: Lave en tabel pr. bruger?

--

2 fylder nok mest, men det er ikke væsentligt. Kun performance er jeg intereseret i.

Der er ca. 60.000 rækker, og selvom der er en del index'er, så kunne jeg forstille mig det ville være hurtigere at søge i mange tilfælde hvis jeg benytter 1:

Nogen der kan oplyse mig lidt?
Avatar billede thedeathart Nybegynder
21. februar 2004 - 23:46 #1
2 giver best performance, set ud fra min egen erfaring..
Avatar billede Slettet bruger
22. februar 2004 - 07:23 #2
Det kommer nok lidt an på hvilken type queries, du laver mest på dem.

Hvis du næsten altid kun laver opslag på en enkelt bruger (og det er vel det mest normale), så vil det nok være hurtigst at have dem i hver sin tabel.

Men hvis du ofte laver opslag på mange brugere på en gang, så vil det være meget besværligt at arbejde med en tabel pr. bruger, og søgninger vil også være langsommere, for MySQL kan jo ikke (så vidt jeg ved) have et index over flere tabeller.
Avatar billede arne_v Ekspert
22. februar 2004 - 09:23 #3
Hvis der kun er en bruger af gangen på systemet => #2 er hurtigst

Hvis der er flere samtidige brugere på systemet => #1 er hurtigst

(og #1 er langt det pæneste design og vedligeholdelses mæssigt)
Avatar billede dank Nybegynder
22. februar 2004 - 21:03 #4
takker.. Jeres synspunkter lyder fornuftige.

Sandbox> Svar?
Avatar billede Slettet bruger
22. februar 2004 - 23:26 #5
Kommer her. Og lige en ekstra kommentar:

Hvis der er mange skrivninger i forhold til opslag, kan det godt tale til fordel for en tabel pr. bruger, da det nok er hurtigere at skrive ind i et index på en lille tabel end på en stor.

Men da det hele afhænger af så mange detaljer vil jeg anbefale at lave et forsøg, hvor du afprøver performance på en server under realistisk brug med begge metoder.

Du kan også prøve mellemveje - f.eks. 4 tabeller: 1 for hver af a-g, h-n, o-u, v-å. Eller måske en for hvert begyndelsesbogstav. Disse kan det være lidt lettere at skrive queries til krydsopslag på, da tabellerne altid er de samme, så du ikke skal bruge performance på at strikke en query sammen.
Avatar billede dank Nybegynder
22. februar 2004 - 23:36 #6
Lyder fornuftigt :o)
Avatar billede Slettet bruger
22. februar 2004 - 23:36 #7
Og en ide mere, som er lidt relateret til din anden tråd om mange inserts:

Prøv med 2 tabeller: 1 til aktive brugere, og en til ikke-aktive. Det vil sandsynligvis være således at en stor del af aktiviteten på serveren er forårsaget af en mindre del af brugerne (se bare her på E).

Denne løsning vil så indebære at du regelmæssigt kører noget, der flytter brugere mellem de to tabeller.

Formålet skulle være at den tabel, der bliver opdateret oftest dermed vil være en del mindre, og det burde derfor også være hurtigere at lave nyt index til den.
Avatar billede arne_v Ekspert
22. februar 2004 - 23:41 #8
sandbox>

Hvorfor skulle det være hurtigere at skrive til et lille index ?

Uanset om der bruges klassiske index sequential trees eller B trees, så
har jeg svært ved at forestille mig den store forskel.
Avatar billede Slettet bruger
22. februar 2004 - 23:53 #9
arne_v:

Det var kun en antagelse, som meget vel kunne have været forkert, men manualen er tilsyneladende enig i min antagelse:

The size of the table slows down the insertion of indexes by log N (B-trees).
http://www.mysql.com/doc/en/Insert_speed.html

Om forskellen er stor nok til at have praktisk betydning overfor de andre faktorer har jeg ingen anelse om. Det er derfor jeg foreslår at afprøve de forskellige muligheder.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester