![]() |
![]() |
![]()
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: 483 Pomógł: 50 Dołączył: 15.03.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Aż mi sie nie chce wierzyć że:
wynik counta jak dasz w mt_rand() i pobierasz potem 1 rekord, daje ci 100 sekund geenrowania pracowałem na podobnej bazie wielkosciowo nie jeden raz i nigdy nie osiagnelem takiej "wartosci" zapytan Ten post edytował Hpsi+ 18.06.2011, 13:18:03 |
|
|
![]()
Post
#3
|
|
Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 ![]() |
Aż mi sie nie chce wierzyć że:
wynik counta jak dasz w mt_rand() i pobierasz potem 1 rekord, daje ci 100 sekund geenrowania pracowałem na podobnej bazie wielkosciowo nie jeden raz i nigdy nie osiagnelem takiej "wartosci" zapytan Count zwróci Ci ilość rekordów. Wszystko będzie działać dobrze, o ile rekordy będą ponumerowane w odpowiedniej kolejności. Dla przykładu masz w bazie pięć rekordów (1, 2, 3, 5, 6). W takiej sytuacji mt_rand może wylosować Ci liczbę 4, co z wiadomej przyczyny nie zadziała. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 19:02 |