나는 두 개의 테이블이있다. 나는 9 개 게임 검색하려고 :와최적화 MySQL의 임의 쿼리
- 1 무작위로 게임을 "doublepoints"META
- 3 개 최신 게임 "프리미엄"META
- 1 랜덤 게임 META
- 1 무작위로 게임을 "특색" (added_at DESC BY ORDER) 내가 그 일을 꽤 까다로운 시스템이 현재로서는
위의 6 게임 중 하나없는
SELECT FLOOR(RAND() * (COUNT(*) - " . ($count - 1) .")) AS `offset`
FROM table_meta WHERE meta = '{$meta}'
SELECT t1.* FROM table_meta t2
LEFT JOIN table_game t1 ON t1.id = t2.id_game
WHERE t2.meta = '{$meta}' LIMIT {$offset}, {$count}
이 (gameRandom 매우 유사하다) 당신이 볼 수 있듯이이 내 제한을 무시 : 순간
$feat = getGameMetaRandom(1, 'featured');
$prem = getGameMetaRandom(1, 'premium');
$dubl = getGameMetaRandom(1, 'doublepoints');
$last = getGameLatest(3);
$rand = getGameRandom(3);
각 임의 기능 (getGameMetaRandom($count, $meta);
에서) 두 개의 질의를한다 은 위의 6 개 게임 중 하나가 아니며이 모든 것은 9 개의 검색어를 사용하며 임의 화는 실제로 무작위가 아닙니다.
- 3 개 무작위로 게임을하는 방법 aforeselected 게임 중 하나를 반복하지. 처음 6 개의 게임을 선택한 후에는 ID를 나열하고 NOT IN()으로 마지막 쿼리에서 사용할 수 있지만 지나치게 최적화되지는 않습니다.
- 랜덤 테이크 게임을 랜덤하게 만드는 방법, 랜덤 옵셋을 선택하지 않고 n 게임을 즐기는 방법은 무엇입니까? 분명히 ORDER BY RAND()를 사용하고 있지만 테이블에 수백 개의 행이 있으면 차이가 발생하지 않는 한 실제로 느린 것에 대해 정말 들었습니다.
- 쿼리 수를 줄이는 방법은 무엇입니까? 일에 첫 번째 세 개의 쿼리, 나는 5 개 쿼리 왼쪽하고 그룹 또는 RAND에 의해 순서를 사용하여() 내가 처음 "검색 오프셋"쿼리를 무시할 수
SELECT t1.* FROM table_meta t2 LEFT JOIN table_game t1 ON t1.id = t2.id_game WHERE t2.meta = '{$meta}' ORDER BY RAND() LIMIT {$count}
하지만 여전히, thiese 같은 것을 함께 할 것입니다 일반적으로 RAND() ORDER BY RAND()를 사용해야합니다. 일부 테스트에서 보면 속도가 너무 느려 보입니다. 더 많은 것을 향상시키기위한 힌트가 있습니까?
세 가지 질문이 있으며 직접 또는 사소한 질문이 없습니다 ... – RichardTheKiwi
@ 리차드 일컬어 사이버 스키 : 나는 .. 추측합니다. 문제를 더 쉽게 고려할 수있는 경우 가능한 해결책과 우려 사항을 추가했습니다. 저는 MySQL에서 초보자이며 거의 아무것도 알지 못합니다. – Maurycy