index

Michal Hlavac hlavki na medium13.sk
Pondělí Červenec 19 16:24:59 CEST 2004


zdravim,
narazil som na zaujimavy problem v postgresql...

mam tabulku z tromi (vsetky integer) atributmi l_model_to_part 
(i_model_id, i_part_id, i_year)

zlozeny primarny kluc sa sklada zo vsetkych troch atributov.
potom existuju indexy:
index_20 BTREE (i_part_id)
index_50 BTREE (i_model_id)

ked napisem:
EXPLAIN SELECT * FROM l_model_to_part WHERE i_part_id=234;

                                     QUERY PLAN
----------------------------------------------------------------------------------
  Index Scan using index_20 on l_model_to_part  (cost=0.00..3.37 rows=10 
width=12)
    Index Cond: (i_part_id = 234)

*v pohode pouzije index_20*

dalej:
EXPLAIN SELECT * FROM l_model_to_part WHERE i_model_id=234;
                              QUERY PLAN
---------------------------------------------------------------------
  Seq Scan on l_model_to_part  (cost=0.00..1400.59 rows=866 width=12)
    Filter: (i_model_id = 234)

*nepouzije index_50*

but, when I use: EXPLAIN SELECT * FROM l_model_to_part WHERE 
i_model_id=234 AND i_model_id=456;
                                     QUERY PLAN
-----------------------------------------------------------------------------------
  Index Scan using index_50 on l_model_to_part  (cost=0.00..41.84 
rows=11 width=12)
    Index Cond: ((i_model_id = 234) AND (i_model_id = 456))

*pouzije index_50*


otazka znie, preco v druhom selekte nepouzije index_50. Su nejake 
obmedzenia na pouzitie indexu (napr. existencia triggeru, alebo nieco 
ine)???

Na zaklade coho sa postgresql rozhoduje, ci index pouzije alebo nie. 
Pretoze toto sa mi zda ucebnicovy priklad na pouzitie indexu.

Pretoze ako tato tabulka nie je sucastou projektu (dam hu do cistej db), 
tak aj druhy selekt pouzije index_50

vdaka, miso

-- 

[ miso hlavac ][ hlavki na medium13.sk ][ http://hlavki.sk ]
[ icq:94900232 ][ callto://hlavki ]


Další informace o konferenci Databases