>  기사  >  데이터 베이스  >  rand() 효율성 최적화 방법을 통한 mysql 주문

rand() 효율성 최적화 방법을 통한 mysql 주문

jacklove
jacklove원래의
2018-06-08 23:36:502193검색

일반적으로 MySQL의 order by rand() 메서드를 사용하여 쿼리에서 데이터 조각을 무작위로 반환합니다. 작업에는

0.25초

가 필요하고 rand()로 주문하려면 임시 테이블을 사용해야 하고 (임시 사용) 파일 정렬

(filesort 사용)

을 사용해야 하는데 이는 비효율적입니다. 개선 방법1. 먼저 총 쿼리된 레코드 수를 가져옵니다. 2. 총 레코드 수에서 N개의 레코드를 무작위로 오프셋합니다(N=0~total-1). 3.

코드는 다음과 같습니다.

mysql> select * from user order by rand() limit 1;
+-------+------------+----------------------------------+----------+--------------+-----------+| id    | phone      | password                         | salt     | country_code | ip        |
+-------+------------+----------------------------------+----------+--------------+-----------+| 15160 | 6549721306 | e4f302120c006880a247b652ad0e42f2 | 40343586 | 86           | 127.0.0.1 |
+-------+------------+----------------------------------+----------+--------------+-----------+1 row in set (0.25 sec)mysql> explain select * from user order by rand() limit 1;
+----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows   | Extra                           |
+----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+|  1 | SIMPLE      | user  | ALL  | NULL          | NULL | NULL    | NULL | 200303 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+--------+---------------------------------+1 row in set (0.00 sec)


분석:
2db7ab7aeda548b1a568b7abef045e28
이 글에서는 rand() 효율성 최적화 방법에 의한 mysql 순서를 소개합니다. 더 많은 관련 내용은 PHP 중국어 홈페이지를 참고해주세요.

관련 권장 사항:

PHP의 데이터베이스에 대한 PDO 연결 해석

PHP 객체 지향, PHP 상속 관련 코드 설명

클래스 이름을 가져오려면 PHP에서 매직 메소드 __CLASS__를 사용하세요. 관련 운영

위 내용은 rand() 효율성 최적화 방법을 통한 mysql 주문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.