Less than 1 minute
๊ธฐ๋ณธ Architecture
์ค๋ผํด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฅผ ์ก์ธ์คํ๋ ํ๋ก์ธ์ค ์ฌ์ด์ ๋ฉ๋ชจ๋ฆฌ ์บ์ ์์ญ(SGA)์ด ์๋ค.
- ๋์คํฌ I/O ์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์บ์ I/O ๋ ๋งค์ฐ ๋น ๋ฅด๋ค.
- ๋ง์ ํ๋ก์ธ์ค๊ฐ ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์ค ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๋ Lock ๊ณผ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ SGA ์ ์์นํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ก์ธ์ค๋ฅผ ์ง๋ ฌํ ํ๊ธฐ ์ํ Latch๋ ํ์.
- ์ค๋ผํด์ ๋ธ๋ก ๋จ์๋ก I/O ํ๋ฉฐ, DBWR/CKPT ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ์บ์-๋ฐ์ดํฐํ์ผ ๋๊ธฐํ ์ํ.
About 3 min
Auto Trace
๊ฐ์
SQL ์ํ ์ ์ค์ ์ผ๋ ์ธก์ ๋ฐ ํ๋ํ๋๋ฐ ์ ์ฉํ ์ ๋ณด๋ค์ ๋ง์ด ํฌํจํ๋ ๋๊ตฌ
AutoTrace ์ต์
์๋์ ๊ฐ์ ์ต์ ์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ์ถ๋ ฅํด ๋ณผ ์ ์์
set autotrace on
: SQL์ ์คํํ๊ณ ๊ทธ๊ฒฐ๊ณผ์ ํจ๊ป ์คํ ๊ณํ ๋ฐ ์คํํต๊ณ๋ฅผ ์ถ๋ ฅset autotrace on explain
: SQL์ ์คํํ๊ณ ๊ทธ๊ฒฐ๊ณผ์ ํจ๊ป ์คํ ๊ณํ์ ์ถ๋ ฅset autotrace on statistics
: SQL์ ์คํํ๊ณ ๊ทธ๊ฒฐ๊ณผ์ ํจ๊ป ์คํํต๊ณ๋ฅผ ์ถ๋ ฅset autotrace traceonly
: SQL์ ์คํํ์ง๋ง ๊ทธ ๊ฒฐ๊ณผ๋ ์ถ๋ ฅํ์ง ์๊ณ , ์คํ๊ณํ๊ณผ ์คํํต๊ณ๋ง์ ์ถ๋ ฅset autotrace traceonly explain
: SQL์ ์คํํ์ง์๊ณ ์คํ๊ณํ๋ง์ ์ถ๋ ฅset autotrace traceonly statistics
: SQL์ ์คํํ์ง๋ง ๊ทธ ๊ฒฐ๊ณผ๋ ์ถ๋ ฅํ์ง ์๊ณ , ์คํํต๊ณ๋ง์ ์ถ๋ ฅ
Less than 1 minute
์ธ๋ฑ์ค ๊ธฐ๋ณธ ์๋ฆฌ
B*Tree ์ธ๋ฑ์ค๋ฅผ ์ ์์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ฒ์ ์ค์บ ์์์ง์ ์ ์ฐพ๊ธฐ ์ํด ๋ฃจํธ ๋ธ๋ก๋ถํฐ ๋ฆฌํ๋ธ๋ก๊น์ง์ ์์ง์ ํ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํจ
์ธ๋ฑ์ค ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅ ํ๊ฑฐ๋ ๋ฒ์ ์ค์บ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
- ์ ์์ ์ธ ์ธ๋ฑ์ค ๋ฒ์ ์ค์บ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ(Index Full Scan์ ๊ฐ๋ฅ)
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์กฐ๊ฑด์ ์์ ๊ฐ๊ณต:
WHERE SUBSTR(์ ์ฒด๋ช , 1, 2) = '๋ํ'
- ๋ถ์ ํ ๋น๊ต:
WHERE ์ง์ <> 'ํ์'
IS NOT NULL
์กฐ๊ฑด๋ ๋ถ์ ํ ๋น๊ต์ ํด๋น:WHERE ๋ถ์์ฝ๋ IS NOT NULL
- '๋ถ์์ฝ๋'์ ๋จ์ผ ์ปฌ๋ผ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ์ธ๋ฑ์ค ์ ์ฒด ์ค์บ์ ํตํด ์ป์ ๋ ์ฝ๋๋ ๋ชจ๋ '
๋ถ์์ฝ๋ IS NOT NULL
' ์กฐ๊ฑด์ ๋ง์กฑ.
- '๋ถ์์ฝ๋'์ ๋จ์ผ ์ปฌ๋ผ ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ค๋ฉด ์ธ๋ฑ์ค ์ ์ฒด ์ค์บ์ ํตํด ์ป์ ๋ ์ฝ๋๋ ๋ชจ๋ '
- ์ธ๋ฑ์ค ์ปฌ๋ผ์ ์กฐ๊ฑด์ ์์ ๊ฐ๊ณต:
- ์ธ๋ฑ์ค ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ
IS NULL
์กฐ๊ฑด๋ง์ผ๋ก ๊ฒ์ํ ๋:where ์ฐ๋ฝ์ฒ is null
- ์์ธ์ ์ผ๋ก ํด๋น ์ปฌ๋ผ์ด
not null
์ ์ฝ์ด ์์ ๊ฒฝ์ฐ Table Full Scan์ ํผํ๊ธฐ ์ํด ์ฌ์ฉ.
- ์์ธ์ ์ผ๋ก ํด๋น ์ปฌ๋ผ์ด
IS NULL
์กฐ๊ฑด์ ์ฌ์ฉํ๋๋ผ๋ ๋ค๋ฅธ ์ธ๋ฑ์ค ๊ตฌ์ฑ ์ปฌ๋ผ์is null
์ด์ธ์ ์กฐ๊ฑด์์ด ํ๋๋ผ๋ ์์ผ๋ฉด Index Range Scan ๊ฐ๋ฅ (์ธ๋ฑ์ค ์ ๋ ์ปฌ๋ผ์ด ์กฐ๊ฑด๊ฑธ์ ๋๋ฝ๋์ง ์์์ผ ํ๋ค)emp_idx : job + deptno where job is null and deptno = 20
Less than 1 minute
์ฉ์ด
- RBO (Rule-Based Optimizer)
- CBO (Cost-based Optimizer)
Index ๊ด๋ จ ์๋ฃ
- https://use-the-index-luke.com/
- http://studybyyourself.com/seminar/sql/course/?lang=en
- https://docs.oracle.com/cd/B10501_01/server.920/a96533/optimops.htm
- https://oracle-base.com/articles/misc/cost-based-optimizer-and-database-statistics
- https://www.siue.edu/~dbock/cmis565/module12-indexes.htm
- http://www.dba-oracle.com/art_9i_indexing.htm
- http://www.remote-dba.net/t_op_sql_btree_indexes.htm
- https://www.morganslibrary.org/reference/indexes.html
- https://dev.to/databasestar/a-guide-to-indexes-in-oracle
- https://www.1keydata.com/sql/sql-index.html
- https://www.tutorialspoint.com/sql/sql-indexes.htm
- https://d2.naver.com/helloworld/1155
- https://www.geeksforgeeks.org/sql-indexes/
- http://www.dba-oracle.com/t_reverse_key_indexes_dml_insert.htm
- http://wiki.gurubee.net/pages/viewpage.action?pageId=26741180
- https://richardfoote.wordpress.com/2008/01/14/introduction-to-reverse-key-indexes-part-i/
- http://wiki.gurubee.net/pages/viewpage.action?pageId=26741180
About 1 min
Hint
๊ธฐ๋ณธ ์ฌ์ฉ์
SELECT /*+ INDEX(idx_col1) */
id, password, name
FROM
emp;
SELECT /*+ ORDERED INDEX(b idx_col1) */
id, password, name
FROM
emp a, depart b
About 1 min
trace
1. ํ ์คํธ ํ ์ด๋ธ ์์ฑ
CREATE TABLE big_table AS
SELECT
*
FROM dba_tables, (SELECT level FROM DUAL CONNECT BY level <= 1000)
WHERE 1=1;
About 1 min
Partitioning
Range Partitioning
typically by date
CREATE TABLE ์ฃผ๋ฌธ(์ฃผ๋ฌธ๋ฒํธ NUMBER, ์ฃผ๋ฌธ์ผ์ VARCHAR2(8), ๊ณ ๊ฐ ID VARCHAR2(5) )
PARTITION BY RANGE(์ฃผ๋ฌธ์ผ์) (
PARTITION P2009_Q1 VALUES LESS THAN ('20090401')
, PARTITION P2009_Q2 VALUES LESS THAN ('20090701')
, PARTITION P2009_Q3 VALUES LESS THAN ('20091001')
, PARTITION P2009_Q4 VALUES LESS THAN ('20100101')
, PARTITION P2010_Q1 VALUES LESS THAN ('20090701')
, PARTITION P9999_MX VALUES LESS THAN (MAXVALUE)
);
Less than 1 minute
JOIN
๋ฐฉ์
-
NESTED LOOP JOIN
-
SORT MERGE JOIN
-
HASH JOIN
OUTER JOIN
NESTED LOOP JOIN
- SQL ๋ฌธ
SELECT A.DNAME, B.ENAME, B.SAL
FROM EMP B, DEPT A
WHERE A.DEPTNO = B.DEPTNO
AND B.SAL > 200
AND A.LOCATION = 'DALLAS'
Less than 1 minute
NOTE
{{ $frontmatter.description }} ๊ด๋ จ ์ ๋ฆฌ๋ด์ฉ์ ๋๋ค.
ํ์ต๋ชฉํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ์์ ๋ฌธ์ ์ ๋ถ์
- ์ฑ๋ฅ๊ฐ์ ๋ชฉํ ์ค์ ๋ฐ ์ํ
- ๋ฐฉ๋ฒ์ ์ ์, ์ฑ๋ฅ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋์ ํ๊ฐ
- ๊ฐ ๋จ๊ณ๋ณ ์ฐ์ถ๋ฌผ ๋ฐ ์ํ ํ๋์ ๊ท์ ๋ฐฉ๋ฒ ๊ณต๋ถ
Less than 1 minute