Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Dlaczego tak długo?
Forum PHP.pl > Forum > Bazy danych > SQLite
arx
Mam takie zapytanie:
  1. SELECT g.DATA, gk.kolejnosc, g.dystans, g.styl
  2. FROM g,
  3. gk
  4. WHERE gk.os = 1066 AND gk.gon = g.id AND gk.kolejnosc > 0

1066 to wartość zwrócona przez ( SELECT id FROM osoby WHERE nazwa = 'Foo' ), ponieważ zauważyłem, że wybranie id osoby i wstawienie go do powyższego zapytanie jest szybsze niż ta:
  1. SELECT g.DATA, gk.kolejnosc, g.dystans, g.styl
  2. FROM g,
  3. gk
  4. WHERE gk.os =( SELECT id
  5. FROM osoby
  6. WHERE nazwa = 'Foo' ) AND gk.gon = g.id AND gk.kolejnosc > 0

co wydaje mi się dziwne. Szybsze powinno byc to drugie z zagnieżdżonym podzapytaniem. No ale nie o tym chciałem.


Chodzi mi o to że zapytanie to wykonuje się około 2500ms na dobrym sprzęcie. Na gorszym kompie trwa to 5-6 skund. Mowa tutaj o sqlite. Natomiast takie zapytanie do postgresa wykonuje się w około 100ms. Róznica jest znaczna. Wszystkie selecty do sqlite wykonywały mi się dużo szybciej niż do pg, oprócz tego jednego przypadku. Szybkość ma dla mnie duże znacznie i czas 5-6 sekund jest nie do zaakceptowania. Zmniejszyć tego selecta już nie mogę. Co można zrobić, żeby wykonywał się szybciej?
elessar
zalozyc indeksy na nazwa, gk.gon, g.id,
dodatkowo subselecty moga nie byc wydajne (taki problem kiedys mial firebird).
DeyV
Niestety - ale wydajność SQLite sprawdza się tylko i wyłącznie na najprostrzych zapytaniach.

Jakiekolwiek Joiny, subzapytania i warunki w znaczący sposób spowalniają tą bazę.

Ale w tym konkretnym przypadku rzeczywiście wygląda to na jakiś problem z indexami, lub typem danych kolumn wykorzystywanych w warunkach i zlączeniach.
arx
Dzięki, indeksy pomogły. Teraz jest 30ms.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.