22. september 2005 - 12:39Der er
12 kommentarer og 1 løsning
Søgning - nyeste ligger sidst
Jeg skal søge på poster i en tabel, hvor der næsten altid vil blive søgt på på de nyeste. Tabellerne er i størrelsesordenen er >25000 poster. De nyeste poster vil jo ligge i bunden af tabellen. Hvordan undgår jeg at søge til bunden før posterne bliver fundet.
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
Slettet bruger
22. september 2005 - 12:46#1
I en søgning i din database, vil vel altid kræve at man søger den fuldstændig igennem, ellers kan man vel aldrig være sikker på at alle poster blev fundet?
Hej Arne Så vidt jeg har forstået medfører et index at db opretter en ekstra tabel hvor kun indexværdierne indgår så der læses færre data pr. post når der søges, og når en korrekt post i denne tabel findes anvendes indexværdierne som henvisning til den post i den tabel hvor de hører hjemme. Findes der metoder til løbende at sortere disse tabeller så alle poster med indexværdi 'a' i kolonnen 'status' altid ligger øverst og tilsvarende 'd' altid ligger nederst (så kan man jo søge med WHILE), og kan man få db til at starte søgning bagfra i tabellen?
men logisk set kan du betragte værdierne i indexet som sorteret så det er meget hurtigt at finde en bestemt værdi og meget nemt at finde alle værdier både i normal rækkefølge og i omvendt rækkefølge
[teknisk set er det normalt en træ struktur]
du kan bruge træ baserede index til LIKE 'xxx%' men ikke til LIKE '%xxx%' - den sidste kræver altid en fuld table scan
Det skal måske lige nævnes at jeg anvender det grafiske værktøj MySQL Adm. Hvad er default for index, og hvis man anvender BTREE-struktur nivelerer MySQL så træet løbende, el. skal det defineres manuelt til f.eks at ske en gang i døgenet? Hvis man anvender Hashing så skal man vel have foruddefineret en størrelse på tabellen?
som jeg husker det så er et B-træ altid balanceret i modsætning til et normalt ISAM-træ
HASH index kan kun bruges til at slå enkelt værdier op med - det duer ikke til andre anvendelser
men et hurtigt kig i MySQL docs afslører at index på on disk tabeller altid er BTREE - det er kun til in memory tabeller at man har valget mellem BTREE og HASH
Et sidste lille spørgsmål. Min viden om sortering i tabeller er på det teoretiske plan. Jeg har ikke tidligere skulle programmere db i større sammenhæng. Jeg valgte at anvende MyISAM tabeller fordi jeg læste at det var hurtigst ved søgning - og min db skal anvendes i sammenhæng med en større hjemmeside. Jeg var ikke klar over at der også findes ISAM-træer. Hvis det ikke tager dig alt for lang tid og hvis det kan siges kort så - hvad er det? Under alle omstændigheder acsepterer jeg ikke en 'kommentar' - kun 'svar' er anvendeligt. Mange tak for hjælpen - Christian
MyISAM tabeller er hurtiger til queries og hurtigere end stort set alle andre databaser fordi de ikke bruger transaktioner
en normal indeks sekventiel fil gror altid ned ad - ligesom når du indsætter i et binært træ, hvorimod B-træer laver det specielle page split som medvirker til at holde træet balanceret
teknisk set er B-træ vel et special tilfælde af et indeks sekventielt træ og det man bruger idag (MyISAM bruger også B-træer)
Mange tak skal du have - en stor sten fra mine skuldre. Mvh Christian
Synes godt om
Ny brugerNybegynder
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.