나는 게임 (unique by int)이라는 테이블을 가지고 있습니다.MySQL - 인덱스 최적화 - 게임 관련 사용자
회원 (사용자 이름별로 고유)이라는 테이블이 있습니다.
각 게임에서 한 번에 최대 6 명까지 참여할 수 있습니다.
그러나, 회원은 게임에서 사임 수 있습니다 -하지만 난 아직도 그들이 그 게임에 참여했던 기록을 유지해야합니다.
나는 다음과 같은 별도의 검색을 수행해야합니다 회원에 대한
활성 게임.
회원을위한 사임 게임. 빈 슬롯 (회원에 의해 작성되지 즉 장소)에 대한 게임
검색합니다.
무엇이 가장 적합한 테이블 구조입니까? 모든 사임 한 게임 목록을 쉼표로 구분하여 멤버에게 텍스트 필드를 입력해야합니까? (이 문제는 궁극적으로이 게임에 대한 게임 정보가 필요하므로 나중에 각 게임 번호에 대한 게임 테이블을 별도로 검색해야 할 필요가 있습니다. 서버의 작업 속도가 느린 것 같습니다.)
게임에서 6 개의 텍스트 필드 (예 : SLOT1, SLOT2 등)를 현재 플레이어의 사용자 이름으로 사용해야합니까? 그러나 다시, 사임 한 멤버는?
지금 내 질문의 주요 부분은 (이는 위의 모든 혼란의 원인) : 내 테이블에 내 인덱스를 설정하는 것 어떻게? 내가 검색을하고있는 중이 야 때
, 나는 플레이어의 사용자 이름과 일치하는 항목이 있는지 등등 SLOTS1보고 게임에보고됩니다. 이것은 6 번 ORed 검색입니다. 이러한 작업을 위해 데이터베이스에서 인덱스를 최적화하려면 어떻게해야합니까?그러면 각 게임에 대해 사임 한 멤버를 어떻게 수행 하느냐에 따라 인덱스를 어떻게 작성합니까?
멤버에게 정수 기본 키 (사용자 이름 대신 문자열 일 가능성이 높음)를 사용하는 경우를 생각해보십시오. –
SLOTS1 등에서 int가 필요할 때만 도움이되는 것을 알 수 있습니다. 검색에서 아마도 더 빨라질 것입니다. 그러나 Indexes의 주된 문제는 그 일을 수행하는 것으로 해결되지 않을 것입니다. – Rewind
물론 해결해야 할 문제는 아니지만 반드시 해결해야 할 중요한 문제입니다. 기본 키가 데이터 독립적 인 경우 중요합니다. 어떤 이유로 회원이 사용자 이름을 변경하면 큰 데이터베이스에서 과부하가되는 전체 색인을 다시 정렬해야합니다. 그래서 그것은 문자열 대 int 문제가 아닙니다. –