I'm writing a python script and do database query to get the ids of employees who are in one table but are not in another. I'm using psycopg2 module for python 2 and PostgreSQL as database. After querying from one table based on a condition, I do another query on another table to get the difference between these tables using the result of previous query. The problem is the full procedure takes a long time. I want to know is there any other method or technique which can make the entire procedure faster? Below is the code I used for doing my feature: def find_difference_assignment_pls_count(self): counter = 0 emp_ids = [] self.test_cursor.execute("""Select id,emp_id from test_test where flag=true and emp_id is not null and ver_id in(select id from test_phases where state='test')""") matching_records = self.test_cursor.fetchall() for match_record in matching_records: self.test_cursor.execute("""Select id from test_table where test_emp_id=%s and state='test_state'""",(match_record['emp_id'],)) result = self.test_cursor.fetchall() if result: continue else: emp_ids.append(match_record['emp_id']) counter +=1 print "Employees of test_test not in test_table: ", counter return emp_ids I run these queries on two tables which at least have more than 500000 records. Therefore the performance is really slow.