![]() |
![]() |
![]()
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: 56 Pomógł: 0 Dołączył: 18.01.2009 Ostrzeżenie: (0%) ![]() ![]() |
@lysy2005 a masz na polu z którego robisz warunek dla COUNT zrobiony index? Oczywiście, ale zapytanie miele i miele bo są cały czas dodawane nowe rekordy, zrobiłem tymczasowo że pobieram 1000 rekordów z warunkiem i z nim w phpie losuje randem. Sposób wskazany wyżej "count" nie zadziała bo dane nie są usegregowane po kolei, Id wygląda rak: 1,100,145,1111,456 itp, ponieważ czasami właśnie rekordy nie spełniające warunków są usuwane. Rozbudowałem troszkę skrypt i już dodaje 1GB na godzinę do bazy, baza ma 20GB wszystko zoptymalizowałem został ten rand nieszczęsny:( Ale 1GB danych na godzinę to trochę mało dla mnie, bo całość ma mieć 500GB... W takim tępię 20 dni by się robiło ;/ PS. może ktoś podpowie z konfiguracją my.cnf Serwer 6GB ramu ~9 GHz aktualnie mam zajęte 95% ramu. Wycinek najważniejszych ustawień: key_buffer = 80M max_allowed_packet = 80M thread_stack = 40M thread_cache_size = 6 query_cache_limit = 40M query_cache_size = 400M System Ubuntu 10, 64bit Baza jest w InnoDB Mysql Wersja serwera: 5.1.49-1ubuntu8.1 Z góry dzięki za pomoc! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 19:30 |