Τα αρχεία για το δευτερο μερος βρισκονται στο αρχικό repository.
Κατά το διάβασμα του αρχείου φροντίζουμε να κρατήσουμε ορισμένα στατιστικά στοιχεία, που θα μας φανούν χρήσιμα για την επιλογή της σειράς εκτέλεσης των κατηγορημάτων. Έτσι για κάθε στήλη κρατάμε την ελάχιστη τιμή (min), την μέγιστη τιμή (max) καθώς και την διασπορά των τιμών (variance). Στην συνέχεια δεχόμαστε τα batches, που αποτελούνται από ένα σύνολο απο queries. Όταν ολοκληρωθεί το batch εκτελείται κάθε query σε σειρά. Στα κατηγορημάτα του κάθε query προσπαθούμε να εκτελέσουμε αυτά που πρώτα θα δώσουν λιγότερα αποτέλεσματα ή θα εκτελεστούν σαφώς πιο γρήγορα. Έτσι εκτελούμε πρώτα τα φίλτρα και μετά τα join. Από τα ίδια τα φίλτρα προσπαθούμε να εκτιμήσουμε ποιό θα δώσει λιγότερα αποτελέσματα βρίσκοντας την απόσταση του φίλτρου από την ελάχιστη ή μέγιστη τιμή. Στην συνέχεια πολλαπλασιάζουμε την τιμή αυτή με την διασπορά της στήλης. Για παράδειγμα, αν είχαμε 0.1>1000 και η ελάχιστη τιμή του 0.1 ήταν η 900 και είχε μεγάλη διασπορά τιμών τότε, μάλλον, θα είχαμε πολλά αποτελέσματα. Ωστόσο, όταν μια σχέση έχει γίνει join με κάποια άλλη, τότε εκτελούμε όλα τα υπόλοιπα κατηγορήματα που αφορούν την σχέση αυτή. Ο λόγος είναι για να κρατάμε όσο το δυνατόν λιγότερες ενδιάμεσες δομές.