Versionsstyring - MySQL subqueries er langsom!
Hej Eksperter,Jeg har et problem med en subquery i MySQL (version 4.1) der er urimelig langsom.
Problemet opstår når jeg vil lave en slags versions-styring af en række filer ved at have en tabel der indeholder informationer omkring filerne og kunne eksempelvis se således ud:
[code]
+------------------------------------+
| path | con1 | con2 | Version |
+------------------------------------+
| file1 | 1201 | LC | 1 |
| file2 | 1201 | LC | 2 |
| file3 | 1202 | SC | 1 |
| file4 | 1201 | SC | 1 |
| file5 | 1202 | SC | 2 |
+------------------------------------+
[/code]
Det jeg ønsker er at udtrække de rækker med fast con1 og con2 hvor Version er størst mulig.
SQL-koden jeg gør dette med ser således ud:
[code]
select * from files where files.Version = (select max(f2.Version) from files f2 where files.con1=f2.con1 and files.con2=f2.con2);
[/code]
Dette vil få den ovenstående tabel til at se sådan ud:
[code]
+------------------------------------+
| path | con1 | con2 | Version |
+------------------------------------+
| file2 | 1201 | LC | 2 |
| file4 | 1201 | SC | 1 |
| file5 | 1202 | SC | 2 |
+------------------------------------+
[/code]
Den ovenstående kode virker fuldstændig korrekt.
Problemet er bare at denne operation er UBEGRIBELIG langsom (>40 sek) når tabellen er rimelig stor (>10000 elementer).
Jeg har kunnet google mig frem til at problemet kunne skyldes en bug i MySQL der gør subqueries langsom (http://bugs.mysql.com/bug.php?id=9090), men jeg vil helst undgå at skulle prøve at opdatere server-software'en.
Så mit spørgsmål er simpelt:
Er der en måde at gøre dette på der ikke er så langsom?
Med venlig hilsen,
Rasmus