반응형
- /**********************************************************************************************
-- Title : [2k] DISTINCT 쿼리의 성능을 향상 시키는 방법
-- Reference : 웹페이지 검색
-- Key word : distinct 성능 performance
**********************************************************************************************/
set statistics io on
/*
-- Case 1.
*/
SELECT DISTINCT o.name
FROM sysobjects o inner join sysindexes i
on o.id = i.id
WHERE o.type = 'U';
--'sysindexes' 테이블. 스캔 수 13, 논리적 읽기 수 27, 물리적 읽기 수 0, 미리 읽기 수 0.
--'sysobjects' 테이블. 스캔 수 1, 논리적 읽기 수 3, 물리적 읽기 수 0, 미리 읽기 수 1.
SELECT o.name
FROM sysobjects o
WHERE o.type = 'U' AND EXISTS (SELECT 1
FROM sysindexes i
WHERE o.id = i.id
);
--'sysindexes' 테이블. 스캔 수 13, 논리적 읽기 수 26, 물리적 읽기 수 0, 미리 읽기 수 0.
--'sysobjects' 테이블. 스캔 수 1, 논리적 읽기 수 3, 물리적 읽기 수 0, 미리 읽기 수 0.
/*
-- Case 2. 결과가 다른건 키가 아닌 customerID를 distinct해서 그런듯...
*/
USE Northwind;
GO
SELECT DISTINCT customerID
FROM orders o INNER JOIN [order details] od
ON o.OrderID = od.OrderID
WHERE od.discount > 0.02;
--'Order Details' 테이블. 스캔 수 830, 논리적 읽기 수 1672, 물리적 읽기 수 0, 미리 읽기 수 0.
--'Orders' 테이블. 스캔 수 1, 논리적 읽기 수 4, 물리적 읽기 수 0, 미리 읽기 수 0.
SELECT customerID
FROM orders o
WHERE EXISTS (SELECT 1
FROM [order details] od
WHERE o.OrderID = od.OrderID
AND od.discount > 0.02
);
--'Orders' 테이블. 스캔 수 380, 논리적 읽기 수 797, 물리적 읽기 수 0, 미리 읽기 수 0.
--'Order Details' 테이블. 스캔 수 1, 논리적 읽기 수 10, 물리적 읽기 수 0, 미리 읽기 수 0.
반응형