Op ons werk hebben we een systeem gemaakt dat gebruik maakt van een database. Nu hebben we ook enkele views, en doordat we gekoppeld zijn met diverse databases van andere bedrijven zijn die views steeds verschillend.
Nu was ik met de analyzer van IBM Client Access Express (DB2) aan het spelen gisteren en er viel me iets raars op.
We hebben bijvoorbeeld de tabellen Aap, Noot en Mies.
Aap en Mies hebben dus een n:m relatie met elkaar.
Wanneer ik de volgende query analyseer (zo ziet een van de views er ongeveer uit):
Dan blijkt dat de primaire index wordt gebruikt om in Mies VNR2 op te zoeken (logisch)
Ook in Noot wordt de primaire index gebruikt om VNR2 op te zoeken (logisch)
Maar van Aap worden alle records bekeken. (???)
Ik zou toch zeggen dat met een blik in Noot duidelijk is welke records in Aap je moet opzoeken? Waarom kijkt dat suffe ding de hele tabel door? Ik werk nu met tabelletjes van enkele honderden records, dus 't gaat zowiezo wel snel. Maar onze klanten hebben soms meer dan een miljoen records, en dat loopt in de papieren.
Bovenstaand verhaaltje lijkt alleen te gelden voor databases die op een AS/400 draaien. In Oracle-systemen wordt wel 'BY ROWID' in tabel Aap gekeken.
Iemand tips om die AS/400 beter z'n best te laten doen?
Nu was ik met de analyzer van IBM Client Access Express (DB2) aan het spelen gisteren en er viel me iets raars op.
We hebben bijvoorbeeld de tabellen Aap, Noot en Mies.
code:
1
2
3
4
| | Aap | | Noot | | Mies | +++++++++++ ++++++++++++ +++++++++++ |VNR1,Date| |VNR1,VNR2 | |VNR2 | Primaire sleutel |rest | |rest | |rest | |
Aap en Mies hebben dus een n:m relatie met elkaar.
Wanneer ik de volgende query analyseer (zo ziet een van de views er ongeveer uit):
code:
1
2
3
| SELECT * FROM Aap A, Noot N, Mies M WHERE A.VNR1=N.VNR1 AND N.VNR2=M.VNR2 AND M.VNR2=63 |
Dan blijkt dat de primaire index wordt gebruikt om in Mies VNR2 op te zoeken (logisch)
Ook in Noot wordt de primaire index gebruikt om VNR2 op te zoeken (logisch)
Maar van Aap worden alle records bekeken. (???)
Ik zou toch zeggen dat met een blik in Noot duidelijk is welke records in Aap je moet opzoeken? Waarom kijkt dat suffe ding de hele tabel door? Ik werk nu met tabelletjes van enkele honderden records, dus 't gaat zowiezo wel snel. Maar onze klanten hebben soms meer dan een miljoen records, en dat loopt in de papieren.
Bovenstaand verhaaltje lijkt alleen te gelden voor databases die op een AS/400 draaien. In Oracle-systemen wordt wel 'BY ROWID' in tabel Aap gekeken.
Iemand tips om die AS/400 beter z'n best te laten doen?
edit:
De Analyzer meldt wel dat de primaire index van Aap wordt gebruikt (gelukkig geen full-table-scan), maar toch bekijkt ie ieder record. De kosten van Noot en Mies zijn steeds 1, maar de kosten van Aap is precies het aantal records in die tabel.
De Analyzer meldt wel dat de primaire index van Aap wordt gebruikt (gelukkig geen full-table-scan), maar toch bekijkt ie ieder record. De kosten van Noot en Mies zijn steeds 1, maar de kosten van Aap is precies het aantal records in die tabel.
[ Voor 9% gewijzigd door Varienaja op 22-08-2003 09:12 ]
Siditamentis astuentis pactum.