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

Dobry pomysł/zły pomysł? Używasz MySQL RAND() poza małym zestawem wyników podzapytania?

Właściwie… Skończyło się na przeprowadzeniu testu i być może odpowiedziałem na własne pytanie. Pomyślałem, że opublikuję te informacje tutaj, na wypadek gdyby były przydatne dla kogokolwiek innego. (Jeśli zrobiłem tutaj coś złego, daj mi znać!)

To trochę zaskakujące...

W przeciwieństwie do wszystkiego, co przeczytałem, stworzyłem tabelę o nazwie TestData z 1 milionem wierszy i wykonałem następujące zapytanie:

SELECT * FROM TestData WHERE liczba =41 ORDER BY RAND() LIMIT 8

...i zwrócił wiersze w ciągu średnio 0,0070 sekundy. Naprawdę nie rozumiem, dlaczego RAND() ma tak złą reputację. Wydaje mi się, że jest całkiem użyteczny, przynajmniej w tej konkretnej sytuacji.

W tabeli mam trzy kolumny:

id [BIGINT(20)] | pole tekstowe [malutki tekst] | numer [BIGINT(20)]

Klucz podstawowy na identyfikatorze, indeks na numerze.

Myślę, że MySQL jest wystarczająco sprytny, aby wiedzieć, że powinien stosować RAND() tylko do 20 wierszy, które są zwracane przez "WHERE number =41" ? (Dodałem tylko 20 wierszy, które miały wartość 41 dla „liczby”.)

Alternatywna metoda podzapytania zwraca wyniki ze średnim czasem około 0,0080 sekundy, czyli wolniej niż metoda bez podzapytania.

Metoda podzapytania:SELECT * FROM (SELECT * FROM TestData WHERE liczba =41) as t ORDER BY RAND() LIMIT 8



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak porównać daty za pomocą klauzuli między klauzulą ​​w hibernacji?

  2. Yii Uzyskaj wykonane zapytanie MySql

  3. Czy kolejność kolumn wpływa na wydajność w Microsoft SQL Server 2012?

  4. Dodaj pola DATE i TIME, aby uzyskać pole DATETIME w MySQL

  5. bind_param() konieczne tylko w przypadku wartości wprowadzonych przez użytkownika czy wszystkich?