Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Najszybszy losowy wybór WHERE kolumna X to Y (NULL)

Uzyskanie prawdziwie losowego rekordu może być powolne. Tak naprawdę niewiele można obejść ten fakt; jeśli chcesz, aby było naprawdę losowe, zapytanie musi załadować wszystkie istotne dane, aby wiedzieć, z których rekordów ma wybierać.

Na szczęście są jednak szybsze sposoby na zrobienie tego. Nie są one odpowiednio losowe, ale jeśli z przyjemnością zamienisz odrobinę czystej losowości na szybkość, powinny wystarczyć do większości celów.

Mając to na uwadze, najszybszym sposobem na uzyskanie „losowego” rekordu jest dodanie dodatkowej kolumny do bazy danych, która jest wypełniona losową wartością. Może solony skrót MD5 klucza podstawowego? Cokolwiek. Dodaj odpowiednie indeksy do tej kolumny, a następnie po prostu dodaj kolumnę do swojego ORDER BY w zapytaniu, a otrzymasz swoje rekordy z powrotem w losowej kolejności.

Aby uzyskać pojedynczy losowy rekord, po prostu określ LIMIT 1 i dodaj WHERE random_field > $random_value gdzie wartość losowa byłaby wartością z zakresu nowego pola (na przykład skrót MD5 liczby losowej).

Oczywiście wadą jest to, że chociaż twoje rekordy będą w losowej kolejności, zostaną zatrzymane w tej samej losowej kolejności. Powiedziałem, że to wymiana perfekcji na szybkość zapytań. Możesz obejść ten problem, aktualizując je okresowo nowymi wartościami, ale myślę, że może to stanowić problem, jeśli chcesz zachować świeżość.

Drugą wadą jest to, że dodanie dodatkowej kolumny może być zbyt trudne, aby zapytać, czy masz ograniczenia pamięci, a Twoja baza danych ma już ogromny rozmiar, lub jeśli masz ścisły DBA, aby ominąć, zanim będziesz mógł dodać kolumny. Ale znowu, musisz coś wymienić; jeśli chcesz przyspieszyć zapytanie, potrzebujesz tej dodatkowej kolumny.

W każdym razie mam nadzieję, że to pomogło.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można utworzyć wielu niestandardowych tabel db po aktywacji wtyczki wp

  2. Jak wykonać skrypt PowerShell w Harmonogramie zadań?

  3. MySQL OGRANICZENIE i ŻADNE DZIAŁANIE

  4. Jak uniknąć błędów funkcje agregujące nie są dozwolone w WHERE

  5. MySQL ZAMÓW WEDŁUG x-y/x ASC