Udtræk hvor bestemt felt har en unik værdi (undgå dubletter) - hvordan? Group by er for langsom?!
Jeg har en tabel med data over nogle spisesteder, og deres koordinater. De væsentlige felter er nævnt nedenfor:CREATE TABLE `r3s`.`provider_foodstuff` (
`foodstuff_id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`lat` float(10,8) NOT NULL,
`lon` float(10,8) NOT NULL,
PRIMARY KEY (`foodstuff_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Mit problem er, at de data som jeg har importeret, indeholder mange dubletter, dvs. der er registreret flere spisesteder på samme adresse og dermed på samme koordinater. Når jeg laver et udtræk vil jeg derfor gerne undgå at disse optræder mere end én gang.
Udtrækket giver oprindeligt 191 rækker inkl dubletter.
Jeg har forsøgt med en
SELECT distinct concat(lat,'/',lon) FROM provider_foodstuff p WHERE lon>12.4495 AND lon<=12.4995 AND lat>55.7478 AND lat<=55.7978
Som giver mig en liste med 126 unikke koordinatsæt. Men så snart jeg beder om et ekstra felt (id, navn etc), går det galt og jeg får igen den fulde liste på 191, da distinct åbenbart ser på hele kombinationen af valgte felter:
SELECT distinct concat(lat,'/',lon), foodstuff_id FROM provider_foodstuff p,provider_foodstuff_fields f WHERE p.fieldcode=f.foodstuff_field_id AND lon>12.4495 AND lon<=12.4995 AND lat>55.7478 AND lat<=55.7978 AND active=1
Så prøvede jeg med group by:
SELECT * FROM provider_foodstuff p,provider_foodstuff_fields f WHERE p.fieldcode=f.foodstuff_field_id AND lon>12.4495 AND lon<=12.4995 AND lat>55.7478 AND lat<=55.7978 AND active=1 group by concat(lat,'/',lon)
Nu får jeg de ventede 126 linjer, og dubletter er sorteret væk, men udtrækket, som det står her, tog ove 30 sekunder at køre!
Til sammenligning tager det måske 2 ms at køre det uden group by.
HVAD er der galt? Og hvordan opnår jeg det ønskede, uden at det tager ½ minut at udtrække 126 af 191 rækker?
På forhånd tak for hjælpen.
PS: Serveren kører
mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (i486) using readline 5.2