Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Select - inaczej :], typy
Kamis
post
Post #1





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 13.05.2003

Ostrzeżenie: (0%)
-----


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 ?

Ten post edytował Kamis 18.06.2005, 13:38:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
SongoQ
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


:: 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.
Go to the top of the page
+Quote Post
Kamis
post
Post #3





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 13.05.2003

Ostrzeżenie: (0%)
-----


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) ?

(IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) a temat jest dla mnie ciekawy :]

Ten post edytował Kamis 19.06.2005, 00:33:24
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kamis
post
Post #5





Grupa: Zarejestrowani
Postów: 127
Pomógł: 0
Dołączył: 13.05.2003

Ostrzeżenie: (0%)
-----


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 :]

Ten post edytował Kamis 20.06.2005, 01:54:51
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 18:45