반응형
  1. /**********************************************************************************************
    -- 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.
반응형

+ Recent posts