번호 | 바인딩 조건 형태 | 선택도(Selectivity) |
---|---|---|
1 | 번호 > :no | 5% |
2 | 번호 < :no | 5% |
3 | 번호 >= :no | 5% |
4 | 번호 <= :no | 5% |
5 | 번호 BETWEEN :no1 AND :no2 | 0.25% |
6 | 번호 > :no1 AND 번호 <= :no2 | 0.25% |
7 | 번호 >= :no1 AND 번호 < :no2 | 0.25% |
8 | 번호 > :no1 AND 번호 < :no2 | 0.25% |
SQL> CREATE TABLE t
2 AS
3 SELECT ROWNUM no
4 FROM dual
5 CONNECT BY LEVEL <= 1000
6 ;
테이블이 생성되었습니다.
SQL> ANALYZE TABLE t COMPUTE STATISTICS FOR TABLE FOR ALL COLUMNS;
테이블이 분석되었습니다.
SQL> EXPLAIN PLAN FOR SELECT * FROM t WHERE no <= :no;
해석되었습니다.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(null, null, 'basic rows'));
Plan hash value: 1601196873
------------------------------------------
| Id | Operation | Name | Rows |
------------------------------------------
| 0 | SELECT STATEMENT | | 50 |
| 1 | TABLE ACCESS FULL| T | 50 |
------------------------------------------
8 개의 행이 선택되었습니다.
SQL> EXPLAIN PLAN FOR SELECT * FROM t WHERE no BETWEEN :no1 AND :no2;
해석되었습니다.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(null, null, 'basic rows'));
Plan hash value: 1322348184
-------------------------------------------
| Id | Operation | Name | Rows |
-------------------------------------------
| 0 | SELECT STATEMENT | | 3 |
| 1 | FILTER | | |
| 2 | TABLE ACCESS FULL| T | 3 |
-------------------------------------------
9 개의 행이 선택되었습니다.
{column}
{column:width=50}{column}
{section}
SQL> EXPLAIN PLAN FOR SELECT * FROM t WHERE no <= 100;
해석되었습니다.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(null, null, 'basic rows'));
Plan hash value: 1601196873
------------------------------------------
| Id | Operation | Name | Rows |
------------------------------------------
| 0 | SELECT STATEMENT | | 99 |
| 1 | TABLE ACCESS FULL| T | 99 |
------------------------------------------
8 개의 행이 선택되었습니다.
SQL> EXPLAIN PLAN FOR SELECT * FROM t WHERE no BETWEEN 500 AND 600;
해석되었습니다.
SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY(null, null, 'basic rows'));
Plan hash value: 1601196873
------------------------------------------
| Id | Operation | Name | Rows |
------------------------------------------
| 0 | SELECT STATEMENT | | 99 |
| 1 | TABLE ACCESS FULL| T | 99 |
------------------------------------------
8 개의 행이 선택되었습니다.
{column}
{column:width=50}{column}
{section}
SELECT /*+ FULL(a) */ *
FROM 아파트매물 a
WHERE :City IN ('서울시', '경기도')
AND 도시 = :City
UNION ALL
SELECT /*+ INDEX(a idx01) */ *
FROM 아파트매물 a
WHERE :City NOT IN ('서울시', '경기도')
AND 도시 = :City
;
{column}
{column:width=50}{column}
{section}
IF :City IN ('서울시', '경기도') THEN
SELECT /*+ FULL(a) */ *
FROM 아파트매물 a
WHERE 도시 = :City
;
ELSE
SELECT /*+ INDEX(a idx01) */ *
FROM 아파트매물 a
WHERE 도시 = :City
;
END IF;
{column}
{column:width=50}{column}
{section}