I my case we need to optimize two tables to stores very large number of records (in millions / billions) - just change the table structure and apply horizontal partitions on date range or no. of records. The new table structure should be able to minimize the records required to store. 1. location_BookedAdvertisement (loc_id, advt_id, start_date, end_date, inventory_text) And data would be like this for location_BookedAdvertisement table: (12, 132, 2009-07-20, 2009-07-25, '1000~2000~5000~8900~3000') This structure reduces the number of rows required to store 100,000 location's date wise assigned inventory by 364 times. Now I only need to store 100,000 rows instead of 100,000 x 365. So I am giving this table structure OK DONE. Also partition this table on no. of records such as 10 millions rows per partition. 2. Now change the structure of tinventory table.. location_ inventory (loc_id, date, Total_available_inventory, booked_inventory) .. to location_ inventory (loc_id, year, Jan1, Jan2, Jan3, Jan4 ,.. ..., Dec29, Dec30, Dec31) And data would be like this for location_ inventory table: (12, 2009, '5000~2000', '10000~8900',... ...,'12000~2000','12000~2000','12000~2000') Here within date column we have 'Total_available_inventory~booked_inventory'. I know there would be 366 column in one table... but today I tested it.... SELECT / INSERT / UPDATE works very very fast as compared to in the earlier table structure. I'll partition this table year-wise i.e based on year column. And this table structure again reduces the required number of records by 364 time... i.e. to store one year inventory of 100,000 locations I would need to store only 100,000 rows. This solution is acceptable.