-
Data: 2012-04-23 17:31:30
Temat: Re: losowy rekord w sqlu
Od: zażółcony <r...@c...pl> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- 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
Najnowsze wątki
- 2025-03-16 Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- 2025-03-16 Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- 2025-03-16 Najlepszy akumulator 12V
- 2025-03-16 Co powinno spotkać "adwokatów dwóch" uczestniczących w przesłuchaniu świadka do którego nie dopuszczono adwokata świadka?
- 2025-03-16 Przednich p-mgielnych nie wolno bez mgły
- 2025-03-16 Co w KANADZIE wolno komercyjnie (na razie się nie czepili?)
- 2025-03-16 silnik-chwilówka
- 2025-03-16 Prokurator Wrzosek "Bezstronna" nie przyczynia się do śmierci (dowodnie) - oświadcza bodnatura [Dwie Kacze Wieże]
- 2025-03-15 kraje nieprzyjazne samochodom
- 2025-03-15 parking Auchan
- 2025-03-15 Art. 19.1 ustawy o ochronie praw autorskich
- 2025-03-15 przegląd za mną
- 2025-03-15 Na co komu okna
- 2025-03-15 Mój elektryk
- 2025-03-15 Fejk muzyczny czy nie fejk