스키마를 디자인하기 전에 요구 사항을 이해하십시오 (가능한 경우).
데이터, 1) 인덱싱 2) 사용 된 스토리지 유형, 3) 공급 업체 엔진 또는 기능에 대해 학습 즉, 캐싱, 인 메모리 기능 4) 데이터 유형 5) 테이블 크기 6) 쿼리 빈도 7) 리소스가 공유되는 경우 관련 작업 부하 8) 테스트
A) 요구 사항은 다양합니다. 하드웨어가 예상 워크로드를 지원할 수없는 경우 워크로드에서 요구 사항을 제공하는 방법을 다시 평가해야합니다. 테이블에 추가 열에 대해. 데이터베이스가 뷰를 지원하는 경우 특정 명명 된 열이있는 특정 데이터의 인덱스 된 뷰 (?)를 만들 수 있습니다 ( '*'선택). 데이터 및 스키마를 정기적으로 검토하여 "쓰레기 제거"-> "쓰레기 제거"증후군에 빠지지 않도록하십시오.
다른 해결책이 없다고 가정합니다. 다음을 고려할 수 있습니다. 문제에 대한 여러 가지 해결책이 항상 있습니다.
1) 인덱싱 : select *는 테이블 스캔을 실행합니다. 다양한 요소에 따라 디스크 검색 및 / 또는 다른 쿼리와의 경합이 포함될 수 있습니다. 테이블이 다목적 인 경우 모든 쿼리가 제대로 수행되고 목표 시간 이하로 실행되는지 확인하십시오. 많은 양의 데이터가 있고 네트워크 또는 기타 리소스가 조정되지 않은 경우 이 점을 고려해야합니다. 데이터베이스는 공유 환경입니다.
2) 저장 유형. 즉, SSD, 디스크 또는 메모리를 사용하는 경우. I / O 시간과 시스템 / CPU의로드는 다양합니다.
3) DBA가 더 높은 성능을 위해 데이터베이스 / 테이블을 조정할 수 있습니까? 어떤 이유로 든 팀은 선택된 '*'가 문제에 대한 최상의 솔루션이라고 결정했습니다. DB 또는 테이블을 메모리에로드 할 수 있습니다. (또는 다른 방법 ... 응답은 2-3 초 지연으로 응답하도록 설계 되었습니까? --- 광고가 회사 수익을 얻기 위해 재생되는 동안 ...)
4) 기준선에서 시작하십시오. 데이터 유형 및 결과 표시 방법을 이해하십시오. 데이터 유형이 작을수록 필드 수는 결과 집합에 반환되는 데이터 양을 줄입니다. 따라서 다른 시스템 요구에 따라 리소스를 사용할 수 있습니다. 시스템 리소스에는 일반적으로 제한이 있습니다. '항상'은 안정성과 예측 가능한 행동을 보장하기 위해 이러한 한계 아래에서 작동합니다.
5) 테이블 / 데이터 크기. 작은 테이블에서 일반적으로 '*'를 선택하십시오. 일반적으로 메모리에 적합하며 응답 시간이 빠릅니다. 다시 .... 요구 사항을 검토하십시오. 기능 크리프 계획; 항상 현재와 가능한 미래의 요구를 계획하십시오.
6) 질의 빈도. 시스템의 다른 워크로드에주의하십시오. 이 쿼리가 매초마다 실행되고 테이블이 작습니다. 결과 세트는 캐시 / 메모리에 유지되도록 설계 할 수 있습니다. 그러나 쿼리가 기가 바이트 / 테라 바이트의 데이터를 가진 빈번한 일괄 처리 프로세스 인 경우 다른 워크로드에 영향을 미치지 않도록 추가 리소스를 할당하는 것이 좋습니다.
7) 관련 작업량. 자원이 어떻게 사용되는지 이해하십시오. 네트워크 / 시스템 / 데이터베이스 / 테이블 / 애플리케이션이 전용 또는 공유입니까? 이해 관계자는 누구입니까? 생산, 개발 또는 QA를위한 것입니까? 이것은 일시적인 "빠른 수정"입니다. 시나리오를 테스트 했습니까? 현재 하드웨어에 얼마나 많은 문제가 존재할 수 있는지 놀랄 것입니다. (예, 성능은 빠르지 만 디자인 / 성능은 여전히 저하됩니다.) 시스템은 초당 10K 쿼리와 초당 5-10 쿼리를 수행해야합니까? 데이터베이스 서버가 전용이거나 다른 응용 프로그램을 수행하는 경우 공유 리소스에서 모니터링이 실행됩니다. 일부 응용 프로그램 / 언어; O / S는 메모리의 100 %를 소비하여 다양한 증상 / 문제를 일으 킵니다.
8) 시험 : 이론을 시험하고 가능한 한 많이 이해하십시오. 선택한 '*'문제는 큰 문제 일 수도 있고 걱정할 필요가없는 것일 수도 있습니다.
SELECT COUNT(*)
나쁜 것은 엄청나게 오래되고 구식 입니다. 자세한SELECT *
내용은 다음을 참조하십시오 : stackoverflow.com/questions/1960036/…