항목을 업데이트하는 것처럼 정렬 및 필터링 열을 처리 할 수있는 빠른 데이터베이스 스키마를 설계하고 싶습니다.자주 변경되는 항목에 가장 적합한 데이터베이스 스키마
이- 가 정확히 하나의 이름, 상태, 마지막 가입 날짜, 설명 및 한 위치
- 이벤트에 해당하는 좌석의 수는 저장 이벤트가있다 :이를 위해 나는 다음과 같은 시나리오를 만들어 참가자가
- 을 subcribes 행사와 함께 모든 시간을 업데이트됩니다 모든 이벤트는 정확히 하나 개의 범주가 있습니다
- 에만 범주
- 이벤트로 나열 할 수있는 이벤트 이름, 상태 또는 날짜 테이블이 10 개 이상의 미오 항목
의 경우를 처리해야
를 사용하여 수행됩니다. 색인은 카테고리 - 이름, 카테고리 - 상태 - 이름, 카테고리 - 날짜 - 이름 및 카테고리 - 날짜 - 상태 - 이름이었다. 이 경우 목록 작성, 필터링 및 정렬은 매우 빠르지 만 항목 삽입, 업데이트 또는 삭제는 매우 느립니다. 또한 색인을 다시 작성하는 데 너무 많은 시간이 걸리기 때문에 잠금 시간 초과가 발생했습니다.
두 번째 시도는 카테고리, 이벤트 및 위치라는 세 가지 테이블을 갖는 것이 었습니다. 그러나 위치 테이블에 6mio 이상의 항목이 있으면 속도가 느려집니다. 나는 빠른 포획을위한 지수 때문에 생각한다. 100k 항목을 추가하는 데 ~ 272 초가 걸립니다. 위치의 인덱스는 기본 인덱스 ID 및 지퍼 거리를했다
다음 시도는 마지막 가입-날짜와 카운터에 대한 자신의 테이블을 생성하는 것입니다. 그러나이 날짜를 필터링하거나이 날짜를 정렬 할 수 있습니까?
3 개 인덱스를 가지고 더 나은가요 같은 : 카테고리 이름, 카테고리 - 날짜, 카테고리-상태 또는 4 개 인덱스 카테고리 이름, 카테고리-상태 이름, 카테고리 최신 이름을 가진 내 솔루션입니다 카테고리 - 날짜 - 상태 - 이름 더 좋은 MySQL 용?
필드 유형에 대해서도 생각하고 있습니다. 현재 이름에 VARCHAR을 사용했습니다. 그러나 모든 항목의 길이가 같으므로 가변 길이를 사용하는 대신 색인의 특정 위치로 이동하는 것이 더 빠르기 때문에 CHAR가 더 나은 것일 수 있습니다. 어떻게 생각해?
위와 같은 시나리오를 지원하는 우수하고 빠른 데이터베이스 스키마가 어떻게 설계되어야하는지에 대한 조언이 있습니까?
인덱스는 고정 길이이므로 테이블 스캔의 경우에도 CHAR와 VARCHAR는 인덱스에 상관 없습니다. –
나는 이것을 몰랐다. 고맙습니다. 모든 관련 열에 인덱스를 추가하여 테이블 스캔을 피하려고했습니다. –