Dennis Haney wrote:
>
> Jeg har denne query jeg gerne vil have optimeret:
>
> select * from samlet a
> where a.Slutdato>=2451999
> and a.Godkendt='j'
> and (a.Sted1=621296
> or a.Sted2=621296
> or a.KunstnerNr=621296)
> order by Startdato,Tidspunkt ;
<snip>
> Så er det man spørger sig selv... HVORFOR bruger den ikke nogen af sine
> index? og beslutter sig for at lave en fuld table scan?
>
> her er en show index from samlet:
> +--------+------------+--------------------------+--------------+-----------
> ----+-----------+-------------+----------+--------+---------+
> | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation |
> Cardinality | Sub_part | Packed | Comment |
> +--------+------------+--------------------------+--------------+-----------
> ----+-----------+-------------+----------+--------+---------+
> | samlet | 0 | PRIMARY | 1 | Nr | A | 13489 | NULL | NULL | |
> | samlet | 1 | samletSted1index | 1 | Sted1 | A | 3372 | NULL | NULL | |
> | samlet | 1 | samletSted2index | 1 | Sted2 | A | 3372 | NULL | NULL | |
> | samlet | 1 | samletKunstnerNrindex | 1 | KunstnerNr | A | 6 | NULL | NULL
> | |
> | samlet | 1 | samletStartdatoindex | 1 | Startdato | A | 499 | NULL | NULL
> | |
> | samlet | 1 | samletSlutdatoindex | 1 | Slutdato | A | 385 | NULL | NULL |
> |
> ...
> +--------+------------+--------------------------+--------------+-----------
> ----+-----------+-------------+----------+--------+---------+
Meget fine indexer, men desværre kan de fleste optimisere ikke bruge et
index på et felt der indgår i en (.. or ..) konstruktion. Dermed kan
samletStedXindex ikke bruges.
Når samletSlutDatoIndex ikke kan bruges, kan det skyldes, at den angivne
værdi ikke er begrænsende nok til at det kan betale sig.
>
> Hvis jeg nu deler query'en op således:
<snip>
> Og derefter kunne jeg samle disse resultater i mit program og lave en
> "distinct", så får jeg det samme ud bare MEGET hurtigere.
<snip>
> Nu er problemet bare at jeg gerne vil kunne generalise alle opslag, så det
> skal kunne gøres med een SQL-sætning.
Hvis du insisterer på at gøre det i én sætning, så lav en union.
> Hvorledes kunne man gøre dette? Hvordan ville man gøre hvis man ikke brugte
> MySQL?
Jeg ser ikke noget, der gør MySQL mindre egnet til dette opslag.
--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk |
http://www.thehungersite.com