Search Postgresql Archives

What to index to speed up my UNION views?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I had a bright idea that has not worked quite as well as I thought.

We have a web sites for selling cars that we are trying to expand to vans, 
bikes etc.  We get a datafeed containing prices and technical data updated 
nightly (for cars it's about 2.3GB, others are smaller).  This comes into SQL 
Server as one database per vehicle type, and we export it as CSV data, which 
is COPY'd into Postgres.

The current version of the application uses Hibernate.  Now, as the database 
for each vehicle type has an idential schema I thought it would be possible 
to use views to access the underlying data so we don't have to duplicate the 
mappings for each data type.  So for example, there is a table "capmod" which 
stores vehicle models.  Unfortunately, the primary key column for the table 
is not unique across all dataset databases, so a model id used to identify a 
car model in the car database may also identiffy a van model in the van 
database.

So, I created a view like this:

CREATE OR REPLACE VIEW capmod AS 
 SELECT 'cap_car'::character varying::character varying(10) AS "vehicle_type", 
car_capmod.cmod_code, ...
   FROM cap_car.car_capmod
UNION 
 SELECT 'cap_lcv'::character varying::character varying(10) AS "vehicle_type", 
lcv_capmod.cmod_code, ...
   FROM cap_lcv.lcv_capmod;

I've removed all the actual data columns.

Effectively this makes the primary key for the view composite based on 
vehicle_type and cmod_code.

The problem is that performance has taken a massive hit.  Maybe the answer to 
this is simple - I just need to make sure that the index on the underlying 
car_capmod, lcv_capmod, XXX_capmod tables is hit in a query such as "SELECT * 
FROM capmod where vehicle_type = 'cap_car' and cmod_code=1234".  Failing that 
I will have to include a vehicle_type column in each of the underlying 
tables, but I want to avoid anything that complicates the import procedure 
(which is already very slow).

I'd be very grateful for any advice

Cheers
Ashley Moran


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux