21. august 2003 - 23:24Der er
12 kommentarer og 1 løsning
Access hurtigere end mySQL
Hejsa eksperter
Jeg har lige installeret mySQL 4.1 som understøtter subqueries. Jeg har denne forholdsvis lange SQL som jeg fyrer af mod en tabel med ca 1500 poster. SQL'en er noget i stil med:
SELECT *, 1 AS Q from tabel WHERE (a AND b) UNION SELECT *, 2 AS Q from tabel WHERE (a OR b) AND id NOT IN (SELECT id from tabel WHERE (a AND b)) ORDER BY Q
Denne sql giver giver et resultat hvor alle resultater hvor både a OG b er sandt listes først og derefter hvor enten a ELLER b er sandt.
Problemet er bare at i Access giver den 1203 resultater på et split-sekund, hvorimod mySQL er 22,3 sekunder om at give det samme resultat, med samme søgeord!
Jeg troede at mySQL var den hurtigste database i verden!!!
lytter også med her... Omend jeg ikke har så meget til overs for access som db i produktionsmiljøet -- men selvfølgelig kan det tænkes at den kan udføre nogle kald bedre end MySQL - især når man betænker at MySQL kun lige fornyligt har fået sub-query support...
dog må jeg sige at jeg er overrasket over forskellen 1 sek <--> 23 sek.
4.1 er er alpha udgave, men altså den eneste "version" der understøtter IN som subquery. IN er understøtter i tidligere versioner ved f.eks. SELECT * FROM tbl WHERE a IN (1,2,3)
Og så vil jeg lige tilføje at sådan som en database opfattes i dag, så kan det diskuteres om Access er er "rigtig" database, men oprindeligt er en database jo "bare" et repository for data med en masse pointere, og så er Excel jo i teorien også en database. Jeg har da brugt excel som database på små websider, hvor en lille udvalgt skare skulle kunne hente databasen og udskrive den på en nem måde....
Men hvorom alting er, så må der da kunne gøres noget, ellers må jeg gå tilbage til Access indtil "de" får optimeret IN i mySQL :-(
Jeg har ikke generingstiderne for hvor lang tid det tager på nettet, men der er en betydelig forskel der også. Hvis nogen vil se det i praksis, så ligger testsiden med mySQL på www.emlopen.dk og den med Access ligger på www.vinguide.net Søg på m og d (m mellemrum d) i søgefeltet ude til venstre. På testsiden kan man også se SQL'en der fyres af. Håber det kan hjælpe et klogt hoved til at komme med en forklaring/løsning :-)
Jeg kunne selvfølgelig bruge mySQL's fede funktion LIMIT, som vil optimere SQL'en meget, men i dette spm. vil en forklaring være at foretrække. arne_v's mening om at IN ikke er optimeret lyder dog sandsynlig...
Jeg tror dog jeg beholder den "gamle" SQL men bruger LIMIT og venter på at den bliver optimeret, da jeg ikke kan få den anden til at fungere helt efter planen. Kravet a OR b bliver kompliceret hvis der skrives 5 ord i søgestrengen, for så er der jo pludselig a, b, c, d og e der skal med...
Takker for foklaringen.
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.