ik heb een query waar een ORDER BY in zit en die er 10 seconde over doet!
niet echt fijn. En dit ligt echt puur aan de ORDER BY want als ik die weghaal duurt ie nog maar 0.01 seconde.
Nou ben ik eens wat gaan stoeien met die query om te kijken hoe ik van die filesort af kon komen (die je met explain zichtbaar maakt) en kwam er uiteindelijk achter dat zelfs de meest simpele vorm van die query (zonder joins) nog een filesort doet, terwijl ik 'm op m'n primary key doe.
Ben toen hier eens wat met de search gaan zoeken en zag een comment van ACM staan die de verklaring gaf:
dit is de simepele versie van m'n query:
Deze query doe ik zo omdat ik dat ID wil hebben, of, als die niet beschikbaar is (er staat in de echte query ook nog het 1 en ander in de where, wat variabel is en door een php script wordt bepaald) degene met het hoogste id daaronder.
Mijn vraag: is er echt geen andere oplossing om van die rottige filesort af te komen, of valt mijn doel misschien op een andere manier te bereiken?
Nou ben ik eens wat gaan stoeien met die query om te kijken hoe ik van die filesort af kon komen (die je met explain zichtbaar maakt) en kwam er uiteindelijk achter dat zelfs de meest simpele vorm van die query (zonder joins) nog een filesort doet, terwijl ik 'm op m'n primary key doe.
Ben toen hier eens wat met de search gaan zoeken en zag een comment van ACM staan die de verklaring gaf:
(vind het trouwens vaag dat dit niet in de manual staat, daar hebben ze het alleen over dat ie dat doet als je ASC en DESC mixed, en ik gebruik enkel een DESC - maargoed, volgens mij klopt het wel wat ACM zegt, want ik zou niet weten waarom ie anders die filesort doet.)Mysql is niet echt een held met sorteren, zodra ie achterstevoren moet sorteren gebruikt ie bijv _altijd_ een filesort.
dit is de simepele versie van m'n query:
code:
(In de echte query wordt nog van alles gejoined (de explain daarvan ziet er verder netjes uit trouwens, no problems there).)1
2
3
| SELECT * FROM rbs WHERE id <= 10597 ORDER BY id DESC LIMIT 0,1 |
Deze query doe ik zo omdat ik dat ID wil hebben, of, als die niet beschikbaar is (er staat in de echte query ook nog het 1 en ander in de where, wat variabel is en door een php script wordt bepaald) degene met het hoogste id daaronder.
Mijn vraag: is er echt geen andere oplossing om van die rottige filesort af te komen, of valt mijn doel misschien op een andere manier te bereiken?