Zapytanie o sortowanie
kornel - 16-01-2006 23:25
Zapytanie o sortowanie
Witam, mowa o postgresql. w tabeli mam kolumne (tekstowa) w ktorej sa wpisy takie jak: 1/04 62/01 3/05 200/04
Ogolnie: numer_glowny/rok
Teraz chcialbym to posortowac najpierw wg roku, pozniej wg numeru glownego, czyli: 62/01 1/04 200/04 3/05
z poprzedniego przykladu. Wymyslilem cos takiego:
SELECT number FROM a ORDER BY substring( number from '%/#"__#"' for '#' ) , int4(substring( number from '#"%#"/__' for '#' ))
Generalnie to sie sprawdza :) Co sadzicie, jak wydajne to bedzie?
-- Pozdrawiam, Kornel
=?UTF-8?B?UmFkb3PFgmF3IEtvcnplbmlld3NraQ==?= - 16-01-2006 23:25
kornel wrote: > Witam, > mowa o postgresql. w tabeli mam kolumne (tekstowa) w ktorej sa wpisy > takie jak: > 1/04 > 62/01 > 3/05 > 200/04 > > Ogolnie: > numer_glowny/rok > > Teraz chcialbym to posortowac najpierw wg roku, pozniej wg numeru glownego, > czyli: > 62/01 > 1/04 > 200/04 > 3/05 > > z poprzedniego przykladu. Wymyslilem cos takiego: > > SELECT number FROM a > ORDER BY substring( number from '%/#"__#"' for '#' ) , > int4(substring( number from '#"%#"/__' for '#' )) > > Generalnie to sie sprawdza :) Co sadzicie, jak wydajne to bedzie? > Nie jestem w tym temacie wyrocznią ale wydaje mi się że trudno będzie stworzyć dobry indeks na substringach, co oznacza że wyszukiwanie takich rekordów będzie zawsze wymagało fullscana po tabeli, co przy dużej ich liczbie będzie bardzo długie.
pozdr
Radek
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 16-01-2006 23:25
Radosław Korzeniewski wrote: > kornel wrote: > >> Witam, >> mowa o postgresql. w tabeli mam kolumne (tekstowa) w ktorej sa wpisy >> takie jak: >> 1/04 >> 62/01 >> 3/05 >> 200/04 >> >> Ogolnie: >> numer_glowny/rok >> >> Teraz chcialbym to posortowac najpierw wg roku, pozniej wg numeru >> glownego, czyli: >> 62/01 >> 1/04 >> 200/04 >> 3/05 >> >> z poprzedniego przykladu. Wymyslilem cos takiego: >> >> SELECT number FROM a >> ORDER BY substring( number from '%/#"__#"' for '#' ) , >> int4(substring( number from '#"%#"/__' for '#' )) >> >> Generalnie to sie sprawdza :) Co sadzicie, jak wydajne to bedzie? >> > > Nie jestem w tym temacie wyrocznią ale wydaje mi się że trudno będzie > stworzyć dobry indeks na substringach, co oznacza że wyszukiwanie takich > rekordów będzie zawsze wymagało fullscana po tabeli, co przy dużej ich > liczbie będzie bardzo długie.
Zawsze można użyć indexu funkcyjnego.
-- P.M.
Robert Grabowski - 17-01-2006 10:51
Radosław Korzeniewski wrote: [...]
>> SELECT number FROM a >> ORDER BY substring( number from '%/#"__#"' for '#' ) , >> int4(substring( number from '#"%#"/__' for '#' )) >> >> Generalnie to sie sprawdza :) Co sadzicie, jak wydajne to bedzie? >> > Nie jestem w tym temacie wyrocznią ale wydaje mi się że trudno będzie > stworzyć dobry indeks na substringach, co oznacza że wyszukiwanie takich > rekordów będzie zawsze wymagało fullscana po tabeli, co przy dużej ich > liczbie będzie bardzo długie. > > pozdr > > Radek
Zrób funkcję, która zwróci ci liczbę (int4) z numeru:
int4(substring( number from '#"%#"/__' for '#' )) << 24 + int4(substring( number from '%/#"__#"' for '#' ))
wtedy będziesz sortował order by funckja(numer). jeżei teraz założysz indeks funkcyjny, to powinno być ok
pozdrawiam Robert Grabowski
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.plptsite.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|