Hallo,
Mijn situatie is als volgt:
2 tabellen (user_settings en detailed_record, de eerste ongeveer 100.000 records de tweede ongeveer 900.000)
user_settings
-----------------
record_id (PK)
anomaly_id
detailed_record
-------------------
record_id (PK)
anomaly_id
car_id
first_activitation_date
nb_occurence
Ik wil nu uit detailed_record alle records hebben waarvan anomaly_id aanwezig is in user_settings.
Dit doe ik als volgt:
Dit geeft als resultaat: 457425 rijen in een kleine 1000 seconden.
ik heb het ook zo geprobeerd:
Ik verwachte hetzelfde aantal rijen, maar ik krijg: 99014 rijen
in 300 seconden.
Ik heb het ook nog op een derde manier geprobeerd:
Die geeft hetzelfde resultaat als tweede manier maar werkt wel trager.
Welke methode is nu juist?? (want het resultaat van de join en de andere methoden verschillen). En ook, hoe kan ik het rapper doen werken? Ik zit immers nog maar met een test databank, het aantal records neemt maandelijks toe.
Bedankt,
Bram
Mijn situatie is als volgt:
2 tabellen (user_settings en detailed_record, de eerste ongeveer 100.000 records de tweede ongeveer 900.000)
user_settings
-----------------
record_id (PK)
anomaly_id
detailed_record
-------------------
record_id (PK)
anomaly_id
car_id
first_activitation_date
nb_occurence
Ik wil nu uit detailed_record alle records hebben waarvan anomaly_id aanwezig is in user_settings.
Dit doe ik als volgt:
code:
1
2
3
4
5
6
| select car_id, anomaly_id, first_activation_date, nb_occurence from detailed_record a inner join user_settings b on (a.anomaly_id = b.anomaly_id) where (a.first_activation_date >= '2005-12-4') and (a.first_activation_date <= '2005-12-30') |
Dit geeft als resultaat: 457425 rijen in een kleine 1000 seconden.
ik heb het ook zo geprobeerd:
code:
1
2
3
4
5
6
| select car_id, anomaly_id, first_activation_date, nb_occurence, from detailed_record a where ((a.first_activation_date >= '2005-12-4') and (a.first_activation_date <= '2005-12-30')) and a.anomaly_id in (select anomaly_id from usersettings) |
Ik verwachte hetzelfde aantal rijen, maar ik krijg: 99014 rijen
in 300 seconden.
Ik heb het ook nog op een derde manier geprobeerd:
code:
1
2
3
4
5
6
7
8
| select car_id, anomaly_id, first_activation_date, nb_occurence from detailed_record a where exists (select anomaly_id from user_settings b where ( (a.anomaly_id = b.anomaly_id) and (a.first_activation_date >= '2005-12-4') and (a.first_activation_date <= '2005-12-30')) ) |
Die geeft hetzelfde resultaat als tweede manier maar werkt wel trager.
Welke methode is nu juist?? (want het resultaat van de join en de andere methoden verschillen). En ook, hoe kan ik het rapper doen werken? Ik zit immers nog maar met een test databank, het aantal records neemt maandelijks toe.
Bedankt,
Bram