나는 바보 같은 작은 게임을 작성했으며 일종의 리더 보드 웹 사이트를 갖고 싶습니다.리더 보드를위한 효율적인 SQL 쿼리/스키마
일반적으로 리더 보드는 10 명 또는 20 명의 최고 선수로 제한되지만, 기록 할 수 있다면 좋을 것 같습니다. 모든 플레이어에 대해 최고 점수는입니다. 그렇다면 항상 전 세계 순위를 표시 할 수 있습니다.
간단한 스키마는 다음과 같은 : - 자신의 최고 점수와 사용자 당 1 개 항목
create table leaderboard (
userid varchar(128) not null,
score real not null,
when datetime not null
);
create index on leaderboard(userid);
내가 필요한 최소한의 정보를 저장겠습니까.
제 질문은 리더 보드에서 누군가의 위치를 효율적으로 결정하는 방법에 관한 것입니다.
select userid from leaderboard order by score desc
그러나이 쿼리를 실행 한 후 선형 목록을 검색하는 것은 DB 성능 관점에서 나에게 조금 말도 안되는 것 같습니다 : 일반적인 생각은 내가 목록에서의 위치에 의해 반환 할 것입니다. 그렇다고해도 빠른 작업이 가능한 쿼리/스키마를 상상하기가 힘듭니다.
어떤 아이디어?
(한 업체가 나는 MS SQL 또는 MySQL의 하나를 사용하는 것이 행복이 쉽게 경우 나는 DB 스키마를 유지하고 (공급 업체에 연결되지 않음) 일반 쿼리하는 것을 선호합니다. 그러나 것이다.
설명을 위해 나는 최고 점수만을 저장하고 있습니다. –
좋습니다, 그럼 최고의 점수에 대한 인덱스가 최선의 방법이 될 것입니다. 순위표에서 COUNT (1)를 선택하면 최고 스코어> = (SELECT score ... 등)가 효율적일 것입니다. 테이블 자체에 대한 참조없이 색인을 스캔하여 해결할 수 있기 때문입니다. – dkretz