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: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%)
|
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%)
|
Co Wy z tym WHERE id = xxx? Przecież można:
@lysy2005 a masz na polu z którego robisz warunek dla COUNT zrobiony index? Można tak, ale tego nie zrobisz w samym MySQL-u, ponieważ w klauzuli LIMIT nie można stosować zmiennych. Wymyśliłem inny sposób na rozwiązanie tego problemu, który jest pewną wariacją mojego poprzedniego pomysłu:
Zamiast dokładnego porównania ID do losowej wartości, wyszukujemy rekordy, które są większe lub równe, niż losowa wartość od 1 do N, gdzie N, to liczba wszystkich rekordów. Można też zmienić operator na znak mniejszości, ale wtedy zapytanie zawsze zwróci pierwszy wynik z tabeli, więc lepiej jest zrobić tak, jak napisałem wyżej. Wtedy nie musimy znajdować rekordu, który ma identyczny ID, jak losowy, ale znajdujemy więcej rekordów z danego zakresu i wybieramy pierwszy z nich. W takiej sytuacji zawsze wylosujemy jakiś rekord i zapytanie nigdy nie powinno zwrócić pustego wyniku. |
|
|
|
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
Speedy Możesz zrobić tak:
[SQL] pobierz, plaintext SELEC... 18.06.2011, 14:54:24
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: 26.12.2025 - 11:39 |