2010-05-27 4 views
2

데이터베이스에서 임의의 라인을 선택하고 싶습니다.SQL 데이터베이스에서 임의의 라인 선택

SELECT column FROM table 
ORDER BY RAND() 
LIMIT 1 

이 SQL 쿼리를 실행했지만 다른 사람이 성능이 좋지 않은 쿼리라고했습니다. 다른 해결책이 있습니까?

thx

+0

나중에 참조 할 수 있도록 RAND()는 mysql에서만 작동합니다. – Maerlyn

답변

3

입니다.

SELECT `column` FROM `table` LIMIT $rand, 1 
+0

좋아, 고마워 :) 또 다른 질문, 관련없는 개발, 나는 프랑스어이고 내 영어가 정확하고 이해할 수 있는지 알고 싶습니다. – Jensen

+0

@Jensen : 저는 러시아어입니다.) – zerkms

+0

어떤 이유로 나는 당신이'mysql'에 대해 물어 보았다고 생각했습니다. 너? : -S – zerkms

0

이의 더 많은 토론있다 : 당신은) PHP 함수에는, mt_rand이 후

SELECT COUNT(*) FROM `table`; 

(와 행의 수를 계산 $ 1에서 무작위로 얻을 계산 및 쿼리와 함께 가야 다양한 DBMS에 대한 성능 영향 및 전략을 포함하여 주제는 this question입니다.

+0

해당 주제의 모든 답변은 2 가지 범주로 구분할 수 있습니다. 1. RAND() (또는 DBMS 고유의 동의어)를 사용하거나 ** [1, id] 범위의 임의의 id를 계산하고 그 중 값보다 큰 값을 찾는 ** slow **. 이 솔루션은 우리에게 불규칙한 랜덤 화 적용 범위 (예 : 1, 2, 3, 4, 5, 6, 7, 8, 9, 1000000000000)를 제공합니다.이 경우 99.99 %의 사례에서 최신 행을 얻을 수 있습니다. 이것은 ** 사실이 아닙니다. 무작위 ** – zerkms

+0

이것은 TANSTAAFL의 문제라고 생각합니다. TABLESAMPLE과 같은 접근법은 속도에 대한 임의성을 명확하게 교환합니다 (그리고 공급 업체별). 진정한 무작위성을 찾으려는 토끼 구멍을 내려 가려면 구현 도전에 이론적 인 수학 문제를 추가해야합니다. 삽입시 의사 난수로 열을 채우는 트리거를 추가하고 큰 테이블을 관리 가능한 샤드로 "미리 슬라이싱"한 다음 한 샤드에서 rand() 제한 1을 선택할 수 있습니다. 따라서 "가짜"임의성 중 일부를 사전 계산합니다. 나는 이러한 모든 접근법이 순결과 실용성 사이의 절충안을 필요로한다는 데 동의한다. –

관련 문제