Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Select - inaczej :]
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Kamis
Najpostrze i najczęściej używane zapytanie wygląda tak:

  1. SELECT *
  2. FROM tabela WHERE jakies_id=1;


Ostatnio dowiedziałem się, że istnieje coś takiego:

  1. SELECT *
  2. FROM tabela WHERE jakies_id=1::int8;


Czyli można dopisać typ danych. Co ma przyśpieszyć w znacznym stopniu otrzymanie wyniku (mając dużą tabelę).

Czy ktoś się spotkał z tym ?
SongoQ
:: to rzutowanie typu, no w tym przypadku nie bedzie duza roznica w wydajnosci, mozne nawet jej nie bedzie bo i tak jest wykorzystywane rzutowanie niejawne. Zobacz sobie jak tworzysz widoki tam jest automatycznie takie rzutowanie wstawiane. Wszystko co jest warunkiem, dana zewnetrzna jest typu varchar. Wiec teoretycznie jesli wstawisz rzutowanie to powinno to pominac i baza nie powinna sprawdzac typow. Taki zapis czesto sie przydaje jesli np robisz Like do pola inet, lub zaokraglanie w typach numeric.

Odpowiadajac na Twoje pytanie czy przyspieszy zapytanie, raczej tak ale wydaje mi sie ze czasy nie beda az tak wielkie.
Kamis
Czyli to jest to samo co:
  1. SELECT *
  2. FROM tabela WHERE jakies_id=CAST(9999999 AS int8);

?

a) Czy w ten sposób mogę wymuszać typy danych, które mają być wybierane(jeśli nie jest to ten typ danych to wywali error) ?

cool.gif Czy jak mam dużą ilość zapytań na raz z JOIN'ami to może być widoczna ta różnica ?

c)
  1. SELECT *
  2. FROM tabela WHERE jakies_id=9999999;


w tym przypadku PostgreSQL użyje indexowania przy wyszukiwaniu ? Właśnie słyszałem, że nie bo nie będzie określonego rzutowania danych.

Z tego co wiem różnice widać przy ilości kilkuadziesięciu tysięcach rekordów.
Zapytanie takie może trwać nawet 2 sek. zamiast np. 0.1 sek.

Muszę przetestować:

  1. EXPLAIN analize SELECT *
  2. FROM tabela WHERE jakies_id=9999999;


z

  1. EXPLAIN analize SELECT *
  2. FROM tabela WHERE jakies_id=9999999::int8;


ale najpierw muszę mieć jakąś dużą bazę danych :|

Ps. Słyszałem, że przy większych typach danych wygodnie jest bazę podzielić ? Wygodnie nie znaczy efektywnie.

Czy jak mam dużą liczbę krotek to szybciej baza będzie przeszukiwana jeśli jest w jednej tabeli czy jak ją podzielę? To samo zapytanie będzie musiało być kierowane do różnych tabel zawierających te same atrybuty. Trzeba będzie sprawdzać czy dana krotka występuje we wszystkich podzielonych tabelach.

Ps. Dzięki za odpowiedzi - człowiek uczy się przez całe życie winksmiley.jpg a temat jest dla mnie ciekawy :]
SongoQ
Cytat
a) Czy w ten sposób mogę wymuszać typy danych, które mają być wybierane(jeśli nie jest to ten typ danych to wywali error) ?

Jesli sie nie da zrzutowac na dany typ to tak. Prosty test stowrz tabele z polem varchar, dodaj jakis rekord z tekstem i w select wpisz ::int4, zobaczysz blad.

Cytat
Ps. Słyszałem, że przy większych typach danych wygodnie jest bazę podzielić ? Wygodnie nie znaczy efektywnie.

Czasami (przewaznie) struktura wymusza wlasnie taki podzial.

Cytat
w tym przypadku PostgreSQL użyje indexowania przy wyszukiwaniu ? Właśnie słyszałem, że nie bo nie będzie określonego rzutowania danych.

Wlasnie wydaje mi sie ze on sobie rzutuje do odpowidnich pol, ale trzeba to sprawdzic. Jak bys sie dokopal do materialow na ten temat to z mila checia bym poczytal.
Kamis
Bardzo ciekawe wykłady znalazłem na ftp śląskiej grupy użytkowników linuxa.

ftp://slug.optics.polsl.gliwice.pl/gnupolsl/01-postgres/

W pdf'ach o tym nie ma. Trzeba ściągnąć część drugą wykładu (film) są zadawane pytania do prelegenta. Ja pobrałem z tego ftp'a wszystkie wykłady o postgresql (jesze TUTAJ JEST JEDEN) i muszę powiedzieć, że są na wysokim poziomie i wiele mnie nauczyły. Tydzień ściągania był wart tego :]
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-2025 Invision Power Services, Inc.