/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL - Mystisk problem med indexering ?
Fra : Christian Bruhn Gufl~


Dato : 18-03-02 11:47

Hej NG.

Jeg har et, efter min mening, mystisk problem:

Jeg har en stor hovedtabel på ca. 500.000 rows
Fra denne er der relationer til flere undertabeller, herunder bla. en postnr
og kommunetabel.

Problemet er at :
1.en søgning på ét indekseret felt går rigtigt hurtig (<1 sek)
2.En søgning på 5 indekserede felter (med relationen opretholdt til to andre
tabeller) går langsomt (6-8 sek)
3.En søgning på 5 indekserede felter (uden relationen opretholdt til to
andre tabeller) går hurtigt (1-2 sek)

Relationerne er begge på indekserede felter i hovedtabellen, og primær
indeks i begge undertabellerne
SQL-sætning er (simplificeret, og felter/tabeller hat ændrede navne) som
følger

1.
SELECT table_1.field_1 .. table_1.field_n , table_2.field_1, table_3.field_1
LEFT JOIN table_2 ON (table_2.key=table_1.key)
LEFT JOIN table_3 ON (table_3.key=table_1.key)
WHERE (table_1.field_z = 'Y') AND table_1.field_x LIKE 'abc%'
ORDER BY table_1.field_x
LIMIT 0,20

2.
SELECT table_1.field_1 .. table_1.field_n , table_2.field_1, table_3.field_1
LEFT JOIN table_2 ON (table_2.key=table_1.key)
LEFT JOIN table_3 ON (table_3.key=table_1.key)
WHERE (table_1.field_z = 'Y')
AND
(
table_1.field_x1 LIKE 'abc%'
OR
table_1.field_x2 LIKE 'abc%'
OR
table_1.field_x3 LIKE 'abc%'
OR
table_1.field_x4 LIKE 'abc%'
OR
table_1.field_x5 LIKE 'abc%'
)
ORDER BY table_1.field_x
LIMIT 0,20

3.
SELECT table_1.field_1 .. table_1.field_n
WHERE (table_1.field_z = 'Y')
AND
(
table_1.field_x1 LIKE 'abc%'
OR
table_1.field_x2 LIKE 'abc%'
OR
table_1.field_x3 LIKE 'abc%'
OR
table_1.field_x4 LIKE 'abc%'
OR
table_1.field_x5 LIKE 'abc%'
)
ORDER BY table_1.field_x
LIMIT 0,20


Hardware er en 2*850 MHz P3 - 2GB RAM - U160 SCSI drev, der kører FreeBSD
Det er ENORMT frustrerende - hvad kan der være galt, og kan nogen hjælpe
mig.

MVH
Christian Bruhn Gufler



 
 
Bo Overgaard (18-03-2002)
Kommentar
Fra : Bo Overgaard


Dato : 18-03-02 23:53

Hej Christian

Ja, det lyder jo ikke helt logisk. Jeg har før haft glæde af dette afsnit af
manualen http://www.mysql.com/doc/Q/u/Query_Speed.html når der var
hastighedsproblemer med join selects. Håber du kan bruge det til noget.

mvh

Bo Overgaard
"Christian Bruhn Gufler" <cbg@mfd.dk> wrote in message
news:3c95c52b$0$10685$4d4eb98e@news.dk.uu.net...
> Hej NG.
>
> Jeg har et, efter min mening, mystisk problem:
>
> Jeg har en stor hovedtabel på ca. 500.000 rows
> Fra denne er der relationer til flere undertabeller, herunder bla. en
postnr
> og kommunetabel.
>
> Problemet er at :
> 1.en søgning på ét indekseret felt går rigtigt hurtig (<1 sek)
> 2.En søgning på 5 indekserede felter (med relationen opretholdt til to
andre
> tabeller) går langsomt (6-8 sek)
> 3.En søgning på 5 indekserede felter (uden relationen opretholdt til to
> andre tabeller) går hurtigt (1-2 sek)
>
> Relationerne er begge på indekserede felter i hovedtabellen, og primær
> indeks i begge undertabellerne
> SQL-sætning er (simplificeret, og felter/tabeller hat ændrede navne) som
> følger
>
> 1.
> SELECT table_1.field_1 .. table_1.field_n , table_2.field_1,
table_3.field_1
> LEFT JOIN table_2 ON (table_2.key=table_1.key)
> LEFT JOIN table_3 ON (table_3.key=table_1.key)
> WHERE (table_1.field_z = 'Y') AND table_1.field_x LIKE 'abc%'
> ORDER BY table_1.field_x
> LIMIT 0,20
>
> 2.
> SELECT table_1.field_1 .. table_1.field_n , table_2.field_1,
table_3.field_1
> LEFT JOIN table_2 ON (table_2.key=table_1.key)
> LEFT JOIN table_3 ON (table_3.key=table_1.key)
> WHERE (table_1.field_z = 'Y')
> AND
> (
> table_1.field_x1 LIKE 'abc%'
> OR
> table_1.field_x2 LIKE 'abc%'
> OR
> table_1.field_x3 LIKE 'abc%'
> OR
> table_1.field_x4 LIKE 'abc%'
> OR
> table_1.field_x5 LIKE 'abc%'
> )
> ORDER BY table_1.field_x
> LIMIT 0,20
>
> 3.
> SELECT table_1.field_1 .. table_1.field_n
> WHERE (table_1.field_z = 'Y')
> AND
> (
> table_1.field_x1 LIKE 'abc%'
> OR
> table_1.field_x2 LIKE 'abc%'
> OR
> table_1.field_x3 LIKE 'abc%'
> OR
> table_1.field_x4 LIKE 'abc%'
> OR
> table_1.field_x5 LIKE 'abc%'
> )
> ORDER BY table_1.field_x
> LIMIT 0,20
>
>
> Hardware er en 2*850 MHz P3 - 2GB RAM - U160 SCSI drev, der kører FreeBSD
> Det er ENORMT frustrerende - hvad kan der være galt, og kan nogen hjælpe
> mig.
>
> MVH
> Christian Bruhn Gufler
>
>



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste