Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 18.01.2009 Ostrzeżenie: (0%)
|
Witam,
mam bazę 4 GB i chce pobrać losowy rekord spełniające moje kryteria. Teraz mam zastosowanie: Select pole FROM tabela WHERE pole='1' ORDER BY RAND(); LIMIT 1 Ale wykorzystując RAND() zapytanie trwa bardzo długo, przy dużych bazach nie spełnia roli. W jaki sposób wy wyciągacie losowe rekordy w takich dużych bazach? Z góry dziękuje za pomoc |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%)
|
Możesz zrobić tak:
To zapytanie wylosuje jedną liczbę od 1 do N, gdzie N, to liczba rekordów w Twojej tabeli a następnie zwróci rekord o podanym ID. To rozwiązanie ma tą wadę, że jeśli rekordy są niespójne (nie ma ciągłości identyfikatorów ID) i część z nich jest usunięta, to wtedy zapytanie czasem zwróci pusty wynik (NULL). Można to spróbować jakoś rozwiązać w SQL-u, albo pójść na łatwiznę i w aplikacji webowej możesz zrobić pętlę do ... while, w której wykonasz to zapytanie raz jeszcze, gdy zwróci wartość NULL. Jeśli nieciągłość w identyfikatorach ID jest mała, rozwiązanie powinno się sprawdzić. Jeśli natomiast rozbieżność jest duża, może to działać bardzo wolno. Tak czy inaczej, powyższe zapytanie działa szybciej, niż ... ORDER BY RAND() choć jest mniej stabilne. Ten post edytował Speedy 18.06.2011, 14:55:28 |
|
|
|
lysy2005 [PHP][MYSQL] LOSOWY REKORD 18.06.2011, 12:48:03
matino Tutaj masz bardzo przydatny link: http://net.tutsp... 18.06.2011, 12:56:11
lysy2005 Cytat(matino @ 18.06.2011, 13:56:11 )... 18.06.2011, 13:11:06
Hpsi+ Aż mi sie nie chce wierzyć że:
[SQL] pobierz, pla... 18.06.2011, 13:17:25 
webdice Cytat(Hpsi+ @ 18.06.2011, 14:17... 18.06.2011, 14:32:39
lysy2005 Cytat(Hpsi+ @ 18.06.2011, 14:17... 18.06.2011, 13:43:52
#luq Co Wy z tym WHERE id = xxx?
Przecież można:
[SQL]... 18.06.2011, 15:59:48 
Speedy Cytat(#luq @ 18.06.2011, 16:59:48 ) C... 19.06.2011, 20:09:23
lysy2005 Cytat(#luq @ 18.06.2011, 16:59:48 ) @... 19.06.2011, 17:09:18
aachi Może rozbij tablice na kilkanaście mniejszych. Nie... 19.06.2011, 17:35:00
aachi Panowie, ale pamiętacie, że autor nie potrzebuje l... 19.06.2011, 20:27:39 
Speedy Cytat(aachi @ 19.06.2011, 21:27:39 ) ... 19.06.2011, 20:40:20
Fifi209 Fajnie jakbyś pokazał strukturę tej tabeli lub naw... 19.06.2011, 20:36:07
vokiel Wybaczcie link do bloga, ale kiedyś o tym pisałem,... 19.06.2011, 20:56:24 
aachi Cytat(vokiel @ 19.06.2011, 20:56:24 )... 19.06.2011, 21:15:32
by_ikar Dobrym rozwiązaniem byłoby zastosowanie cron'a... 20.06.2011, 09:16:55 
uupah5 coraz ciekawsze pomysły:
rozbijanie tabeli na wiel... 20.06.2011, 09:49:40 
by_ikar Cytat(uupah5 @ 20.06.2011, 10:49:40 )... 20.06.2011, 16:59:57 
uupah5 Cytat(by_ikar @ 20.06.2011, 17:59:57 ... 20.06.2011, 22:28:44
thek Ja osobiście kombinowałbym także pod kątem:
Zlicz ... 20.06.2011, 14:15:08 ![]() ![]() |
|
Aktualny czas: 28.12.2025 - 02:35 |