-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!news.task.gda.pl!not-for-mail
From: zażółcony <r...@c...pl>
Newsgroups: pl.comp.programming
Subject: Re: losowy rekord w sqlu
Date: Mon, 23 Apr 2012 17:31:30 +0200
Organization: CI TASK http://www.task.gda.pl/
Lines: 41
Message-ID: <jn3ski$9ej$1@news.task.gda.pl>
References: <jmuf1p$rlf$1@inews.gazeta.pl>
NNTP-Posting-Host: efp194.internetdsl.tpnet.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: news.task.gda.pl 1335195090 9683 83.14.249.194 (23 Apr 2012 15:31:30 GMT)
X-Complaints-To: a...@n...task.gda.pl
NNTP-Posting-Date: Mon, 23 Apr 2012 15:31:30 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327
Thunderbird/11.0.1
In-Reply-To: <jmuf1p$rlf$1@inews.gazeta.pl>
Xref: news-archive.icm.edu.pl pl.comp.programming:196955
[ ukryj nagłówki ]W dniu 2012-04-21 16:08, M.M. pisze:
> Hey
>
> Moje pytanie jest proste. Jak efektywnie wybrać losowy
> rekord (ewentualnie kilka losowych) dużej tabeli w sqlu?
>
> Sztuczki tego typu:
> SELECT * FROM table ORDER BY rand LIMIT kilka
> zdaje się że przeglądają całą tabelę, a to jest niedopuszczalne.
>
> Pozdrawiam
Taki pomysł "z czapki":
Dodaj sobie dodatkowe pole RND, z góry wypełnij je wartościami
losowymi typu double z przedziału <0.0-1.0)
Jak przewidujesz bardzo dużo rekordów - być może warto rozważyć
dwa double
Zakładasz indeks.
Potem trzaskasz zapytania w rodzaju
select limit 1 where RND<=random()
(przy pechu może się zdarzyć, że wyskoczy 0, warto zadbać,
by w tabeli pojawił się rekordy brzegowe RND = 0.0 i 1.0)
Losowanie nie jest tu idealnie dokładne,
rekordy nie mają dokładnie takiego samego prawdopodobieństwa wybrania
- ale w wielu wypadkach w ogóle nas to nie boli, nie wiemy z góry, które to.
Za to przy joinach masz trochę łatwiej, np.
możesz wykonać sumę z trzech pól z różnych tabel i podzielić przez
3 - i znów masz liczbę losową o równomiernym rozkładzie,
dajesz limit 1. Tyle, że tu już jest trochę problem z brakiem indeksu.
Dodając nowe rekordy się nie przejmujesz tym, ile jest
już w tabeli, zawsze po prostu losujesz wartość.
Podobnie nie przejmujesz się, że powstaną dziury przy usuwaniu.
Problem będzie dopiero, jak usuniesz rekordy bezpośrednio
wg. warunków skonstruowanych wprost o kolumnę RND, ale
chyba nikt Cię do tego nie zmusza ?
Następne wpisy z tego wątku
- 23.04.12 18:49 M.M.
- 23.04.12 19:31 M.M.
- 24.04.12 01:34 M.M.
- 24.04.12 11:11 zażółcony
- 24.04.12 12:01 M.M.
- 24.04.12 12:42 M.M.
Najnowsze wątki z tej grupy
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-11 Wyważanie kół rowerowych
- 2024-11-11 Kosz, gdzie??
- 2024-11-11 Coraz mniej ludzi robi prawo jazdy
- 2024-11-11 Opole => SAP HANA Cloud Dev / Data Engineer <=
- 2024-11-11 Warszawa => Spedytor Międzynarodowy <=
- 2024-11-11 Lublin => Senior PHP Developer <=
- 2024-11-11 Marki => Senior PHP Symfony Developer <=
- 2024-11-11 Chrzanów => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-11 Gliwice => Specjalista ds. public relations <=
- 2024-11-11 Gdańsk => Kierownik Działu Spedycji Międzynarodowej <=
- 2024-11-11 Gdańsk => Head of International Freight Forwarding Department <=
- 2024-11-11 Warszawa => Sales Development Representative (in German) <=
- 2024-11-11 Marsz niepodległości
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa