테이블에 적절한 인덱스가있는 경우 JOIN을 사용하는 것이 더 나을 지 모르지만 종종 병목 현상의 원인이됩니다. 다중 선택 대신 데이터를 비정형 화하는 방법을 살펴볼 수 있습니다. 사용자가 여러 테이블에서 카운트 또는 타임 스탬프를 업데이트하는 작업을 수행 할 때 사용자가 이러한 테이블을 조인 할 필요가 없도록하는 것이 훨씬 "비쌉니다".
쿼리 성능 튜닝에 가장 적합한 도구는 EXPLAIN을 사용하는 것입니다. 쿼리 전에 EXPLAIN을 입력하면 스캔되는 행 수를 볼 수 있습니다. 목표가 낮을수록 색인이 효과적입니다. 다른 하나는 인덱스를 만들 때 여러 필드에 복합 인덱스를 사용하고 WHERE 절에 나타나는 순서대로 왼쪽에서 오른쪽 순서로 정렬하는 것입니다. 당신은 쿼리하기 전에 EXPLAIN 입력 할 수 있습니다과 일치하는 스캔 행의 수가 10,000을 반환 할 수 있습니다
SELECT id, name, description, status FROM sometable WHERE name LIKE '%someName%' AND status = 'Active';
: 예를 들어
당신은 sometable 10,000 행을 가지고있다.
ALTER TABLE sometable ADD INDEX idx_st_search (name, status);
당신은 다음 다시 테이블에 EXPLAIN 수행하고 크게 개선 스캔 행과 성능을 숫자로 1을 반환 할 수 있습니다 : 당신은 복합 인덱스를 만들 수 있습니다.
일반적으로 단일 SELECT 문을 사용합니다. 관계형 데이터베이스는 쿼리 실행을 최적화 할 때 매우 유용합니다. 의심 스러울 경우, 항상 두 가지 접근법을 모두 프로파일 링하여 어떤 것이 더 잘 수행되는지 확인할 수 있습니다. – David
나는 데이터베이스를 프로파일 링 한 적이 없다. 성능을 테스트하려면 어떻게합니까? – Mausimo
그것은 전적으로 당신이 사용하고있는 데이터베이스에 달려 있습니다. 예를 들어 MS SQL Server의 경우 SQL Management Studio에서 쿼리 실행 계획을 확인하여 쿼리의 모든 단계를 자세히 분석 할 수 있습니다. MySQL에서는'EXPLAIN' 키워드를 사용하여 쿼리 실행 계획을 분석 할 수 있습니다. 일반적으로 성능을 테스트하기 위해 여러 옵션을 여러 번 수행하고 여러 번 수행하며 각 실행에 평균 소요 시간을 얻는 작은 응용 프로그램을 작성할 수 있습니다. – David