Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL RAND() колко често може да се използва? използва ли /dev/random?

Генераторът на псевдослучайни числа MySQL е напълно детерминистичен. Документите казват:

Не може да използва /dev/random, тъй като MySQL е проектиран да работи на различни операционни системи, някои от които нямат /dev/random.

MySQL инициализира начална стойност по подразбиране при стартиране на сървъра, като използва цялото число, върнато от time(0) .Ако се интересувате от изходния ред, той е в източника на MySQL във файл sql/mysqld.cc, функция init_server_components() . Не мисля, че някога се засажда отново.

Тогава следващите „случайни“ числа се основават единствено на семето. Вижте изходния файл mysys_ssl/my_rnd.cc, функция my_rnd() .

Най-доброто решение на практика за вашата задача за произволен избор, както за производителност, така и за качество на рандомизацията, е да генерирате произволна стойност между минималната стойност на първичен ключ и максималната стойност на първичен ключ. След това използвайте тази произволна стойност, за да изберете първичен ключ във вашата таблица:

SELECT ... FROM MyTable WHERE id > $random LIMIT 1

Причината да използвате> вместо =е, че може да имате пропуски в идентификатора поради изтриване или връщане на редове, или може да имате други условия в клаузата WHERE, така че да имате пропуски между редовете, които отговарят на вашите условия .

Недостатъците на този метод по-голямо от:

  • Редове след такава разлика имат по-голям шанс да бъдат избрани и колкото по-голяма е разликата, толкова по-голяма е вероятността.
  • Трябва да знаете MIN(id) и MAX(id), преди да генерирате произволната стойност.
  • Не работи толкова добре, ако имате нужда от повече от един произволен ред.

Предимства на този метод:

  • Това е много по-бързо от ORDER BY RAND(), дори за скромни размери на таблицата.
  • Можете да използвате произволна функция извън SQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Пакетно увеличаване на стойността?

  2. Как да актуализирате базата данни, докато поставяте отметка в квадратчето с jquery?

  3. MySQL Левещайн

  4. Не можете да заредите часови зони?

  5. Изявление на казус в MySQL