문제

MySQL에서는 일반적으로 3개 열이 있는 100개 행을 반환하는 것이 더 빠르고/더 효율적이며/확장 가능합니까, 아니면 100개 열이 있는 1개 행을 반환합니까?

즉, 레코드와 관련된 많은 키 => 값 쌍을 저장할 때 각 키 => 값 쌍을 Record_id를 키로 사용하여 별도의 행에 저장하는 것이 더 낫습니까, 아니면 열을 사용하여 Record_id당 하나의 행을 갖는 것이 더 낫습니까? 키마다?

또한 키를 상당히 정기적으로 추가/제거해야 한다고 가정합니다. 이는 테이블이 충분히 커지면 다중 열 접근 방식의 장기적인 유지 관리 가능성에 영향을 미칠 것이라고 가정합니다.

편집하다: 명확히 하자면, "정기적으로"란 한 달에 한 번씩 키를 추가하거나 제거하는 것을 의미합니다.

도움이 되었습니까?

해결책

정기적으로 열을 추가하거나 제거해서는 안됩니다.

다른 팁

http://en.wikipedia.org/wiki/entity-attribute-value_model

이 모델에는 많은 나쁜 점이 있으며 다른 대안이 있다면 사용하지 않을 것입니다. 애플리케이션에 필요한 데이터 열의 대다수 (사용자 사용자 정의 가능한 필드 제외)를 모르는 경우 디자인에 더 많은 시간을 보내고 파악해야합니다.

키가 사전 설정된 경우 (설계 시간에 알려짐), 그렇습니다. 각 키를 별도의 열에 넣어야합니다.

디자인 시간에 알려지지 않은 경우 나중에 외부에서 구문 분석 해야하는 키 값 쌍의 목록으로 데이터를 반환해야합니다. RDBMS.

키/값 쌍을 저장하는 경우 두 개의 열이 있는 테이블이 있어야 합니다. 하나는 키용(이것을 테이블의 PK로 설정)과 다른 하나는 값(아마도 인덱싱이 전혀 필요하지 않음)용입니다."열쇠, 전체 열쇠, 그리고 열쇠 ​​외에는 아무것도 아니다"를 기억하십시오.

다중 열 접근 방식에서는 열을 제거하면 모든 값이 삭제되고 이를 원하지 않을 것이기 때문에 테이블이 제한 없이 커지는 것을 알 수 있습니다.나는 거의 1000개의 열이 있는 하나의 테이블이 있는 레거시 시스템에서 작업한 경험을 바탕으로 이야기합니다. 그 중 대부분은 비트 필드였습니다.결국 누군가 때문에 열을 삭제할 수 없게 됩니다. ~할 것 같다 그것을 사용하고 마지막으로 수행했을 때 오전 2시까지 백업으로 롤백하는 작업이 있었습니다.

첫째 : 데이터에 얼마나 자주 액세스 해야하는지 결정하십시오. 데이터가 항상 한 번의 샷으로 검색되어야하고 대부분 사용하는 경우 모든 키 쌍을 직렬화 된 값 또는 XML 값으로 저장하는 것을 고려하십시오. 해당 데이터에 대해 모든 종류의 복잡한 분석을 수행해야하고 값 쌍이 필요하다면 열은 괜찮지 만 쿼리를 수행 해야하는 값으로 제한하십시오. 일반적으로 행보다 하나의 매개 변수에 하나의 열을 사용하는 쿼리를 설계하기가 더 쉽습니다. 또한 반환 된 값이 모두 한 줄보다 많은 것보다 더 쉽게 작업하는 것이 더 쉽다는 것을 알게 될 것입니다.

둘째 : 가장 자주 액세스하는 데이터를 분리하여 자체 테이블에 넣고 다른 데이터를 다른 데이터에 넣으십시오. 그건 그렇고 100 열은 많은 것이므로 데이터를 더 관리하기 쉬운 작은 청크로 분할하는 것이 좋습니다.

마지막으로 : 자주 변경 될 수있는 데이터가있는 경우 한 테이블에서 열 (키)을 작성한 다음 키 값을 저장할 수치 키 값을 사용해야합니다. 이것은 동일한 키를 두 번 이상 사용하고 조회를 할 때 검색 속도를 높여야한다고 가정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top