Archief - Slow query door ORDER BY

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Venn

Legacy Member
Hoi,

Met wat knutselen heb ik voor mijn schoonbroer een MS Access DB omgezet naar MySQL. Er doet zich echter een probleem voor wanneer ik een tabel sorteer. De query is plots enorm traag.
Ik heb nochtans geoptimized en indexen geplaatst waar nodig, althans dat denk ik toch.

Elke tabel heeft een primary key en 'consultation' heeft indexen op DentistID en PatientID.

Code:
[SIZE=2][FONT=arial][COLOR=#990099][B][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fselect.html&token=7f0215381535ad82c64a5079caf144ce"]SELECT[/URL] [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=fuchsia]*[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`Naam`[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`First name`[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`Name`[/COLOR]
[COLOR=#990099][B]FROM [/B][/COLOR][COLOR=black]consultation [/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]dentist [/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]patient [/COLOR][COLOR=black]p[/COLOR]
[COLOR=#990099][B]WHERE [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`PatientID` [/COLOR][COLOR=fuchsia][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fcomparison-operators.html%23operator_equal&token=7f0215381535ad82c64a5079caf144ce"]=[/URL] [/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`PatientID`[/COLOR]
[COLOR=#990099][B][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Flogical-operators.html%23operator_and&token=7f0215381535ad82c64a5079caf144ce"]AND[/URL] [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`DentistID` [/COLOR][COLOR=fuchsia][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fcomparison-operators.html%23operator_equal&token=7f0215381535ad82c64a5079caf144ce"]=[/URL] [/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`DentistID`[/COLOR][/FONT][/SIZE]
Query took 0.0259 sec

Code:
[COLOR=#990099][B][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fselect.html&token=7f0215381535ad82c64a5079caf144ce"]SELECT[/URL] [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=fuchsia]*[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`Naam`[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`First name`[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`Name`[/COLOR]
[COLOR=#990099][B]FROM [/B][/COLOR][COLOR=black]consultation [/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]dentist [/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia],[/COLOR][COLOR=black]patient [/COLOR][COLOR=black]p[/COLOR]
[COLOR=#990099][B]WHERE [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`PatientID` [/COLOR][COLOR=fuchsia][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fcomparison-operators.html%23operator_equal&token=7f0215381535ad82c64a5079caf144ce"]=[/URL] [/COLOR][COLOR=black]p[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`PatientID`[/COLOR]
[COLOR=#990099][B][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Flogical-operators.html%23operator_and&token=7f0215381535ad82c64a5079caf144ce"]AND[/URL] [/B][/COLOR][COLOR=black]c[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`DentistID` [/COLOR][COLOR=fuchsia][URL="http://localhost/pma/url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.1%2Fen%2Fcomparison-operators.html%23operator_equal&token=7f0215381535ad82c64a5079caf144ce"]=[/URL] [/COLOR][COLOR=black]d[/COLOR][COLOR=fuchsia].[/COLOR][COLOR=#008000]`DentistID`[/COLOR]
[COLOR=#990099][B]ORDER[/B][/COLOR][COLOR=#990099][B]BY [/B][/COLOR][COLOR=#008000]`ConsultID` [/COLOR][COLOR=#990099][B]DESC[/B][/COLOR]
Query took 1.6491 sec

hulp van iemand met kennis is welkom, alvast bedankt.

Venn

Legacy Member
Code:
SELECT * 
FROM consultation c
LEFT OUTER JOIN patient p ON c.`PatientID` = p.`PatientID` 
LEFT OUTER JOIN dentist d ON c.`DentistID` = d.`DentistID` 
ORDER BY  `ConsultID` DESC

Dit heeft het opgelost, maar ik begrijp niet echt waarom.

bealzebub

Legacy Member
EXPLAIN is je vriend. Gewoon eens EXPLAIN voor je twee queries plaatsen en zien wat MySQL zegt dat er gebruikt wordt. Zo kan je te weten komen hoe hij je indexes gebruikt. Ik vermoed dat ie een file join op je order by, wat dus in feite gewoon een non-indexed based sort is.

Op zich zou de LEFT OUTER JOIN niets mogen uitmaken op de crossjoin (inner join) die je ervoor gebruikte (buiten dan dat je alle records van de linkertabel zult krijgen, ook als er geen records op de gejoinde tabel hangen).

Doe dus eens een explain van beide en post eens het resultaat als je er niet aan uitgeraakt. Met de vaststelling dat de ene manier rapper is dan de andere weet je eigenlijk niets.
Da's alsof je zou zeggen: die twee auto's zien er quasi hetzelfde uit, maar de ene peert toch een pak rapper dan de andere. Als je dan onder de kap kijkt, ga je misschien de verklaring vinden ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan