Avatar billede galthen Nybegynder
27. februar 2015 - 21:59 Der er 15 kommentarer

Kæmpe database

Jeg har en database med en tabtel med mere en 200 millioner records.
Den beståer af ID, Korttext, Antal, Pris, Udgift

Databasen er meget meget langsom.

Nogle forslag til hvad der kan gøres for at få den hastighedsoptimeret?
Avatar billede arne_v Ekspert
27. februar 2015 - 22:21 #1
Er der indeks paa de felter som der soeges paa?
Avatar billede galthen Nybegynder
27. februar 2015 - 22:36 #2
Det eneste felt som der søges på er korttext.
Men det er kun de andre felter hvor jeg kan trykke "add index". Hvordan kan jeg ellers tilføje index?

Server info: CPU 2 x Intel(R) Xeon(TM) 2.66GHz, 4GB RAM, 2 x 73GB SCSI, RAID1
Avatar billede arne_v Ekspert
27. februar 2015 - 22:43 #3
Er det et felt af typen TEXT?

Søger du på specifik tekst eller wildcard?

Hvis wildcard er det '%xxx' eller 'xxx%' eller '%xxx%'?
Avatar billede arne_v Ekspert
27. februar 2015 - 22:43 #4
4 GB er jo ikke vildt meget efter dagens standard.

Hvor lange er de korttext vaerdier?
Avatar billede cht22 Professor
27. februar 2015 - 22:48 #5
Man kunne evt. dele det op i 28 tabeller, så tabel et starter korttext med "a", tabel 2 starter korttext med "b" osv. Nu ved jeg ikke helt hvordan der skal kunne søges og hentes fra databasen, så jeg er ikke sikker på at det kan lade sig gøre, men hvis det kan så bliver søgningen 28 gange hurtigere.
Avatar billede galthen Nybegynder
27. februar 2015 - 22:48 #6
Langt de fleste er under 30 anslag.
Datatype er: text
Avatar billede arne_v Ekspert
27. februar 2015 - 22:53 #7
Hvis:
- du kan leve med en max laengde paa 255
- det du soeger paa ikke starter med en wildcard %
saa burde:
- aendre type til VARCHAR(255)
- putte indeks paa feltet
goere det meget hurtigere.
Avatar billede galthen Nybegynder
27. februar 2015 - 22:57 #8
Mange tak :)  Det prøver jeg.
Hver lille ændring på databasens opsætning tager lang tid at gennemføre så jeg skriver resultatet når det er gjort..
Avatar billede nemlig Professor
28. februar 2015 - 11:00 #9
Jeg er med på en lytter og tillader mig lige at spørge (tror også det kan være trådstarters interesse):

Hvis  feltet fx har maks 100 tegn, vil char(100) så ikke være en endnu bedre løsning. Mener at jeg har læst et sted, at varchar(100) ikke er løsningen, da den fylder lige så meget som varchar(255).
Avatar billede arne_v Ekspert
28. februar 2015 - 14:46 #10
Hvis alle varedier er 100 lange saa vil CHAR(100) vaere bedre.

Og ja en VARCHAR(100) fylder lige saa meget som en VARCHAR(255) hvis der er mindre end 100 tegn i.

Men men men.

'ABC' fylder:

CHAR(100) - 100
CHAR(255) - 255
VARCHAR(100) - 4
VARCHAR(255) - 4

:-)

(vi antager single byte charset her)
Avatar billede nemlig Professor
28. februar 2015 - 17:37 #11
OK, super info.

Så er jeg nødt til også at spørge om:

Hvis man bruger varchar(), så kan man vel lige så godt ALTID sætte den til varchar(255) i stedet for fx varchar(100)?
Avatar billede arne_v Ekspert
28. februar 2015 - 17:48 #12
Aarsagen til at bruge VARCHAR(100) eller VARCHAR(30) fremfor VARCHAR(255) er ikke performance men data integritet.

Hvis data ikke kan vaere stoerre end 50 saa kan du faa databasen til at afvise forsoeg paa indsaette stoerre varedier ved at lade typen vaere VARCHAR(50).
Avatar billede nemlig Professor
28. februar 2015 - 18:16 #13
Ok, det giver god mening. Tak for input.
Avatar billede galthen Nybegynder
02. marts 2015 - 18:35 #14
Jeg er igang med at oprette en ny tabel da det er for tungt at ændre i den nuværende.

Der er to felter som der bør være index på.

Korttext varchar(100)
Antal (int)

Der søges kun i Korttext men der sorteres altid på Antal.

Hvilken type index er det bedst at komme på de to?

Der er:
Primary
Unique
Index
Fulltext
Avatar billede galthen Nybegynder
13. marts 2015 - 22:18 #15
Smider du et svar arne_v.

VARCHAR(100) gør tabellen en del lettere.
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

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