I would greatly appreciate it if someone could run this code in their environment and let me know if you get results similiar to mine. The INT test results in execution times of 11 - 50+ secs increasing each time the test is run. The FLOAT test execution times are consistently < 3 secs regardless of how many times it is run.
Without actually trying the code, I'd bet that an index is getting used for the float8 case, but not in the int8 case:
if (dtype == INT_TYPE){ snprintf(buffer, sizeof(buffer), "UPDATE shot_record SET trace_count = %d " \ "WHERE shot_line_num = %d " \ " AND shotpoint = %d " \ " AND index = %d" , 0, shotline, shotpoint + i, 0); } else { snprintf(buffer, sizeof(buffer), "UPDATE shot_record SET trace_count = %d " \ "WHERE shot_line_num = %f " \ " AND shotpoint = %f " \ " AND index = %d" , 0, (float)shotline, (float)shotpoint + (float)i, 0); }
Try running EXPLAIN ANALYZE on these update statements manually. It also might help to run VACUUM ANALYZE after populating the tables.
HTH,
Joe
---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match