40 개의 가능한 메시지 풀에서 임의의 메시지를 보내는 기능을 추가하는 약 30,000 명의 회원이있는 사이트가 있습니다. 회원은 같은 메시지를 두 번받을 수 없습니다.이것은 비정규 화의 경우입니까?
하나의 테이블에는 40 개의 메시지가 있고 다른 테이블에는 메시지와 구성원 간의 다 대다 관계가 매핑되어 있습니다.
cron 스크립트가 매일 실행되고 30,000에서 구성원을 선택하고 40에서 메시지를 선택한 다음이 메시지가 이전에이 사용자에게 전송되었는지 확인합니다. 그렇지 않으면 메시지를 전송합니다. '예'일 경우,이 구성원이 아직 수신하지 않은 메시지를 찾을 때까지 조회를 다시 실행합니다.
내가 지금 걱정하는 것은이 m-m 테이블이 매우 커지게된다는 것입니다. 30,000 명의 회원과 40 개의 메시지에서 우리는 이미 보내지 않은 메시지를 찾기 위해 검색해야하는 120 만 개의 행을 가지고 있습니다.
비정규 화의 경우입니까? 회원 테이블에서 메시지가 전송 될 때마다 1 플래그가 추가되는 40 개의 열 (message_1, message_2 ... message_40)을 추가 할 수 있습니다. 내가 틀리지 않으면 cron 스크립트의 쿼리를 훨씬 빠르게 실행할 수 있습니다.
?
동의합니다. 아래에서 조금 더 자세히 설명했습니다. –
CONCAT_WS를 사용하여 첫 번째 SELECT 문에서 수행중인 작업을 명확하게 설명해 주시겠습니까? – stef
글쎄, 쉼표 구분자를 사용하여 보내지 않은 모든 메시지의 ID를 연결합니다. 이렇게하면 모든 사용자에 대한 ID 목록을 하나의 SELECT에 반환 할 수 있습니다. –