Thread
-
RE: [GENERAL] Optimal indicies
Jackson, DeJuan <djackson@cpsgroup.com> — 1999-04-16T16:41:15Z
try: EXPLAIN SELECT pos_id, rating FROM pos_rating pr WHERE date_i = current_date AND city_id = 2 AND EXISTS (SELECT DISTINCT pos_id FROM positions p WHERE subsec_id = 1 AND status = 'A' AND pr.pos_id=p.pos_id) ORDER BY rating; Index date_i and city_id only. -DEJ > -----Original Message----- > From: Oleg Broytmann [SMTP:phd@sun.med.ru] > Sent: Friday, April 16, 1999 8:05 AM > To: PostgreSQL > Subject: [GENERAL] Optimal indicies > > Hello! > > It is definitely FAQ, but I haven't found an answer in docs or mailing > list. > How do I create indicies? (No, no, I know CREATE INDEX syntax :) But > how > do I plan my indicies that optimizer will use? I expected a topic in > postgres guides, but there is no one. Any general advice? > > For example, here is a table (I am not showing here other tables, I > think they are not important): > > -- Position's rating for today for every city > CREATE TABLE pos_rating ( > pos_id int4 not null references positions (pos_id), > date_i date default current_date, > city_id int2 not null references cities (city_id), > rating float default 5 check (rating >= 1 and rating <= 10), > primary key (pos_id, date_i, city_id) > ); > > Currently, there is only one index for primary key. > > And here is a query cost. Index is not used. What index I need to add? > Do I need to rewrite queries (using EXIST instaed of IN, as it once > suggested)? > > EXPLAIN SELECT pos_id, rating FROM pos_rating > WHERE pos_id IN > (SELECT pos_id FROM positions WHERE subsec_id = 1 AND status = 'A') > AND date_i = current_date AND city_id = 2 > ORDER BY rating ; > > NOTICE: QUERY PLAN: > > Sort (cost=236.43 size=0 width=0) > -> Seq Scan on pos_rating (cost=236.43 size=5 width=12) > SubPlan > -> Seq Scan on positions (cost=3.11 size=3 width=4) > > Oleg. > ---- > Oleg Broytmann http://members.xoom.com/phd2/ > phd2@earthling.net > Programmers don't die, they just GOSUB without RETURN. > >
-
RE: [GENERAL] Optimal indicies
Oleg Broytmann <phd@sun.med.ru> — 1999-04-18T09:25:47Z
Hi! On Fri, 16 Apr 1999, Jackson, DeJuan wrote: > try: > EXPLAIN SELECT pos_id, rating > FROM pos_rating pr > WHERE date_i = current_date AND city_id = 2 AND > EXISTS (SELECT DISTINCT pos_id FROM positions p WHERE subsec_id = 1 AND > status = 'A' AND pr.pos_id=p.pos_id) > ORDER BY rating; This probably will help, thanks. > Index date_i and city_id only. Why? How do I find (for any given query) what indices I do need? Postgres (being just a program) definetely have a set of rules where to use and where not to use indicies. Any way for us to know/understand these rules? Any general rules? > -DEJ Oleg. ---- Oleg Broytmann http://members.xoom.com/phd2/ phd2@earthling.net Programmers don't die, they just GOSUB without RETURN.