몇 가지 결과를 가져오고 효율성에 문제가있는 두 개의 상당히 큰 테이블을 쿼리하려고합니다.비효율적 인 JOIN 방법?
참고 : 관련 열을 포함하여보기 싫은 것처럼 보입니다.
TableA의은 (주) 제품 ID, ownerID을 가지고 있으며, 열
를 계산TableB의 (소유자) ID, accountHolderID 및 이름 열
난 할 노력하고있어하는 쿼리 TableA의 어디 제품 ID입니다있다 = X는 Stock.productID, Stock.accountHolderID 및 Owners.name을 끌어 올립니다. 이 두 테이블 사이의 관계는 Stock.ownerID = Owners.ID입니다. 그래서 WHERE 조건이 5 개의 productID를 가져 오면 TableA의 ownerID와 일치하는 TableB의 이름이 필요합니다.
이 상황에서 유일한 고유 ID는 내가 INNER 쿼리를 TableB의 물건을 일치 가입 추가 할 때 는
그냥 그 제품에 대한 TableA의에 기본 SELECT 쿼리를 수행하지만 15 초 소요 TableB의
에서 Owners.ID한다 10 분 이상 걸립니다. 나는이 쿼리를 비효율적으로 설계했다고 생각합니다.SELECT
Owners.name,
Stock.productID,
Stock.ownerID
FROM Stock
INNER JOIN
Owners
ON Stock.ownerID = Owners.ID
WHERE
Stock.productID = 42301679
어떻게이 쿼리를보다 효율적으로 만들 수 있습니까?
WHERE 조건에 대한 OR을 추가하면 한 번에 여러 제품 ID를 가져올 수 있습니까?
15 초가 긴 것처럼 보입니다. 환경을 물어봐도 될까요? –
꽤 기본적인 쿼리 인 것 같습니다. 테이블의 행 수는 무엇이며, 어떤 인덱스가 있습니까? 또한, 어떤 DBMS를 사용하고 있습니까? (MySQL, 오라클 등). 내 첫 번째 추측은 색인이 누락되었습니다. – Jody
타이밍을 확인하기 위해 기본 SELECT 쿼리를 다시 수행했습니다. 실제로는 9 초입니다. mySQL 환경. Stock 테이블에 21,489,000 개의 항목이 있고 Owners 테이블은 약 439,000입니다. – Jay