Ik ben bezig een applicatie te bouwen die ook op grotere datasets efficiënt draait. Daarom kijk ik ook naar de snelheid van SQL-queries om te bepalen wat er geoptimaliseerd kan worden. Om het een en ander te testen heb ik een tabel met dummydata met 10100 records.
Zo doet deze query er ~69ms over:
Dat terwijl onderstaande query er wel 844ms over doet:
Weten jullie waar dit verschil vandaan komt? In feite ben ik bij de tweede query niet meer data aan het ophalen. (toch?) Dat terwijl op internet lijkt alsof exists sneller is.
Zo doet deze query er ~69ms over:
SQL:
1
2
3
4
5
6
| SELECT * FROM `activities` INNER JOIN `group_relations` on `activities`.`id` = `model_id` WHERE `model_type` = 'activities' and `relation_type` = 'visible' and `group_id` in ('1', '21') ORDER BY `id` DESC LIMIT 101 |
Dat terwijl onderstaande query er wel 844ms over doet:
SQL:
1
2
3
4
5
6
7
8
9
| SELECT * FROM `activities` WHERE exists ( SELECT * FROM `group_relations` WHERE `activities`.`id` = `group_relations`.`model_id` and `group_relations`.`model_type` = 'activities' and `group_id` in ('1', '21') ) ORDER BY `id` DESC LIMIT 101 |
Weten jullie waar dit verschil vandaan komt? In feite ben ik bij de tweede query niet meer data aan het ophalen. (toch?) Dat terwijl op internet lijkt alsof exists sneller is.
[ Voor 1% gewijzigd door RobIII op 03-04-2019 18:00 . Reden: Queries leesbaar gemaakt ]
U zegt: ‘Alles is toegestaan.’ Zeker, maar niet alles is goed. Alles is toegestaan, maar niet alles is opbouwend.