Dla danego zapytania, wykorzystanie wskaźnika zależy od kosztu przy użyciu tego wskaźnika w porównaniu do sekwencyjnego skanowania
Często deweloperzy myśleć, że ponieważ nie ma indeksu, zapytanie powinno działać szybciej, a jeśli zapytanie działa wolno, rozwiązaniem jest indeks. Zwykle ma to miejsce, gdy zapytanie zwróci kilka krotek. Jednak wraz ze wzrostem liczby krotek w wyniku może wzrosnąć koszt korzystania z indeksu.
Używasz PostgreSQL. Postgres nie obsługuje klastrowania wokół określonego atrybutu. Oznacza to, że postgres, w konfrontacji z zapytaniem o zakres (typu att> a i att < b), musi obliczyć liczbę krotek w wyniku (upewnij się, że odkurzasz często swoją bazę danych) i koszt użycia indeks w porównaniu do skanowania sekwencyjnego. wtedy zdecyduje, którą metodę zastosować.
można skontrolować tę decyzję uruchamiając
EXPLAIN ANALYZE <query>;
w psql. Powie Ci, czy używa indeksu, czy nie.
Jeśli naprawdę chcesz używać indeksów zamiast skanowania sekwencyjnego (czasami jest to konieczne) i naprawdę wiesz, co robisz, możesz zmienić koszt skanowania sekwencyjnego w stałych terminarza lub wyłączyć sekwencyjne skanowanie na korzyść jakiejkolwiek innej metody. Zobacz tę stronę dla szczegółów:
http://www.postgresql.org/docs/9.1/static/runtime-config-query.html
Upewnij przeglądania prawidłową wersję dokumentacji.
--dmg
Możesz pisać plan wyjaśnić całkowitą liczbę wierszy i dokładną wartość „bardzo wolno”? –
Przeczytaj http://stackoverflow.com/tags/postgresql-performance/info (i powiązaną stronę wiki języka SlowQueryQuestions), a następnie zaktualizuj swoje pytanie za pomocą odpowiednich wyników "wyjaśnij analizę" i zgłoś ponownie. Ponieważ używasz generatora zapytań, możesz potrzebować użyć 'auto_explain' lub zalogować zapytania i ponownie wykonać je ręcznie. –
Należy opublikować schemat i typ zapytania wolnego. Na pytanie, które jest sformułowane, nie można w uzasadniony sposób odpowiedzieć ... –