는 매우 느립니다이 문제에 대한가져 오기 RAND() 한 쿼리 RAND() BY ORDER없는 행은 거대한 테이블에서 하나의 임의의 행을 얻기 위해 MySQL의에서 RAND()를 사용
SELECT quote FROM quotes ORDER BY RAND() LIMIT 1
Here is an article 이것이 왜 그런지입니다. 이것은 단지 하나 개의 쿼리 가능한 지 여부,
SELECT COUNT(*) AS cnt FROM quotes
- Use result to generate a number between 0 and COUNT(*)
SELECT quote FROM quotes LIMIT $generated_number, 1
궁금 :
이들 솔루션은 두 개의 쿼리를 사용하는 것입니다.
SELECT * FROM quotes
LIMIT (
ROUND(
(SELECT COUNT(*) FROM quotes) * RAND()
)
), 1
을하지만 MySQL이 제한 내에서 어떤 논리를 허용하지 않습니다 솔기 :
그래서 내 방식이었다. 이 주제에 관한 정보는 찾을 수 없지만 이것이 사실인지는 알 수 없습니다.
그래서 내 질문 :
- 어떻게 LIMIT 내에서 RAND()를 사용할 수?
- 에 대한 다른 방법은 하나의 쿼리로 해결할 수 있습니까? quotes_id가 틈이 없을 경우
SELECT * FROM quotes WHERE quotes_id = ROUND( (SELECT COUNT(*) FROM quotes) * RAND() ) LIMIT 1
하지만에만 작동합니다 :
가능한 복제본 [MySQL은 빠른 600K 행에서 10 개의 임의 행을 선택합니다.] (0120-365-006) –
나중에 다른 질문이 나보다 많이 게시되었다 :-) 그것이 중복되었지만, 네. – JochenJung