>  기사  >  데이터 베이스  >  MySQL의 범위 내에서 임의의 값을 생성하는 방법은 무엇입니까?

MySQL의 범위 내에서 임의의 값을 생성하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-26 06:56:30165검색

How to Generate Random Values Within a Range in MySQL?

MySQL의 범위 내에서 임의의 값 얻기

소개

MySQL을 사용할 때 임의의 값을 생성해야 하는 경우가 있을 수 있습니다. 지정된 범위에 속하는 값입니다. RAND() 함수가 존재하는 동안에는 이 요구 사항을 충족하지 않습니다. 이 기사에서는 MySQL에서 이를 달성하기 위한 최선의 접근 방식을 자세히 설명합니다.

해결책:

지정된 범위 내에서 임의의 값을 생성하는 MySQL의 최적 방법은 다음과 같습니다.

ROUND((RAND() * (max-min))+min)
  • RAND(): 0과 1 사이의 난수를 생성합니다.
  • max: 원하는 범위의 최대값.
  • min: 원하는 범위의 최소값.

이 수식은 RAND()에 max와 min의 차이를 곱하고 결과에 min을 더합니다. ROUND()를 적용하여 정수 값을 얻습니다.

PHP 구현과 비교:

MySQL 솔루션에 해당하는 PHP는 다음과 같습니다.

<code class="php">rand($min, $max)</code>

그러나 벤치마크에서는 많은 수의 값을 처리할 때 MySQL 솔루션이 약간 더 빠르다는 것을 보여줍니다. PHP와 MySQL 사이의 선택은 처리되는 행 수와 임의의 값만 필요한지 또는 추가 열이 반환되는지 여부에 따라 다릅니다.

예제 쿼리

10 사이의 임의 값을 얻으려면 and 200:

<code class="mysql">SELECT ROUND((RAND() * (200-10))+10) AS `foo`</code>

추가: 성능 비교

성능 차이를 더 자세히 설명하기 위해 다음 PHP 스크립트를 실행했습니다.

<code class="php">// MySQL
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT ROUND(RAND() * (200-10) + 10) FROM dual' );
    $r = mysql_fetch_array( $r );
}
$end = microtime(1);

// PHP
$start = microtime(1);
for( $i = 0; $i < 100000; $i++ )
{
    $r = mysql_query( 'SELECT 200 AS two, 10 AS tem FROM dual' );
    $r = mysql_fetch_array( $r );
    $r[2]= rand($r[0], $r[1]);
}
$end = microtime(1);</code>

결과에 따르면 MySQL은 임의의 값만 필요한 경우 임의의 값을 생성하는 것이 더 빠르지만 추가 열이 반환되는 경우에는 더 느립니다.

위 내용은 MySQL의 범위 내에서 임의의 값을 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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