Autor | Zpráva | ||
---|---|---|---|
tark Profil |
#1 · Zasláno: 19. 1. 2007, 22:34:09
Mám takový zvláštní problém. Za boha nemůžu PostgreSQL donutit, ať používá indexy u tabulek, kde už jsou nějaká data ... Řeknu to asi takhle - když mám tabulku s daty, přidám index a udělám EXPLAIN SELECT * FROM categories WHERE uid=2, tak se index nepoužívá, ovšem když z databáze vymažu hodnoty (truncate..) a vložím je tam, tak se už index používá..
Nedá se nějak donutit aby indexy používala i u existujících dat? Reindex nefunguje ... :-( |
||
tark Profil |
#2 · Zasláno: 21. 1. 2007, 19:53:09
Na serveru mi to dokonce nefunguje ani když udělám nová tabulka -> přidat index -> vložit data a pořád mi to při explain píše seq scan (= zadny index) :(
|
||
djlj Profil |
#3 · Zasláno: 21. 1. 2007, 22:03:53 · Upravil/a: djlj
tark
Asi je to blbost, ale nastavuješ ten index na správný sloupec (sloupce)? :) |
||
Kajman_ Profil * |
#4 · Zasláno: 22. 1. 2007, 09:33:46
A nepomůže VACUUM ANALYZE?
|
||
tark Profil |
#5 · Zasláno: 22. 1. 2007, 13:49:56
djlj: Podle me ano, mořím se s tím dva dny, na MySQL to fungovalo napoprvé... I když někde jsem četl, že to nemusí fungovat u pár (desítek) položek a já to testoval právě na takovýchto tabulkách, že se na index DB vybodne a prohledá celou db normálně... ;-) Zkusím to na něčem s 5000 řádky ;)
kajman: zkusím... |
||
tark Profil |
#6 · Zasláno: 22. 1. 2007, 18:39:58 · Upravil/a: tark
Ty indexy jsou zvláštní věc ... Někdy se použijí, někdy nepoužijí atp. Ale už jsem donutil PgSQL nějak je používat, na tabulce s 5000 řádky fungovali napoprvé...
Úspora: cca 0.5ms / 120 ms |
||
Časová prodleva: 6 dní
|
|||
pavel stehule Profil |
#7 · Zasláno: 28. 1. 2007, 21:34:46
Indexy nejsou zvlastni, jenom PostgreSQL neni MySQL.
a) indexy se nepouziji pokud by sekvencni cteni bylo rychlejsi nez cteni prostrednictvim indexu. Takze v pripade, ze se cte vic nez 30% tabulky nebo kdyz ma tabulka mene nez 1000 radek (zhruba), tak se index nepouzije. b) pokud nespustite prikaz analyze, resp. vacuum analyze tak se predpoklada, ze kazda tabulka ma 10000 radek, coz obycejne vede k spatnemu provadecimu planu. c) pokud si myslis, ze jsi lepsi nez optimalizator, zkus prikaz set enable_seqscan to off; tim penalizujes sekvencni cteni, takze kdykoliv kdy se muze pouzit index tak se index pouzije. neco malo o optimalizaci dotazu v postgresu najdes v http://postgresql.interweb.cz/index.php/%C3%9Avod_do_PostgreSQL_SQL#Op timalizace Servus Pavel |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0