일반적으로 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에서 매직 메소드 __CLASS__를 사용하세요. 관련 운영
위 내용은 rand() 효율성 최적화 방법을 통한 mysql 주문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!