ํธ๋์ญ์ ์ด ์๋ฃ๋ ํ์ ๋ฐ๋ก Undo ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฌ์ฉํ์ง ๋ง์๋ผ๊ณ ์ค๋ผํด์๊ฒ ํํธ๋ฅผ ์ฃผ๋ ๊ฒ
์ฌ๋กฏ ITL -> ํธ๋์ญ์
ID, status, UBA(Undo Block Address), ์ปค๋ฐ SCN(ํธ๋์ญ์
์ฑ๊ณต ์)
์ฌ๋กฏ ๋ถ์กฑ ํด๊ฒฐ -> inittrans, maxtrans, pctfree
consistent ์ฝ๊ธฐ(select) = ๋
ผ๋ฆฌ์ ์ฝ๊ธฐ(cr) = query = consistent gets
current ์ฝ๊ธฐ(dml) = ๋ฌผ๋ฆฌ์ ์ฝ๊ธฐ(pr) = disk = db block gets
๋ค๋ง, ๊ฐฑ์ ํ ๋์ ๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ์์
๋งํผ์ Consistent ๋ชจ๋๋ก ์ด๋ฃจ์ด์ง๋ค
autonomous ํธ๋์ญ์ - ๋ฉ์ธ ํธ๋์ญ์ ๋ง๊ณ ์๋ธ ํธ๋์ญ์ ๋ง ๋ฐ๋ก ์ปค๋ฐ
ash = direct path i/o ๋ ํน์ง ๊ฐ์ (๋์น ์๋ต, ๋๋ฌด ๋น ๋ฆ ๋ฑ)
Dictionary ์ค๋ธ์ ํธ๋ฅผ ์ฐธ์กฐํ ๋
Temporary ํ
์ด๋ธ์ ์ฐธ์กฐํ ๋
์ํ์ค๋ก๋ถํฐ CURRVAL, NEXTVAL Pseudo ์ปฌ๋ผ์ ์กฐํํ ๋
์ฟผ๋ฆฌ์์ SQL ์ค์๊ฐ ๋ ์ง ํจ์๋ฅผ ์ฌ์ฉํ ๋
result ์บ์ฑ ํํธ - RESULT_CACHE
rowid = ๋ธ๋ก๋ฒํธ(8์๋ฆฌ) + ๋ก์ฐ๋ฒํธ(4์๋ฆฌ) + ๋ฐ์ดํฐํ์ผ๋ฒํธ(4์๋ฆฌ) => 6byte
rowid = ๋ฐ์ดํฐ์ค๋ธ์ ํธ๋ฒํธ(6์๋ฆฌ) + ๋ฐ์ดํฐํ์ผ๋ฒํธ(3์๋ฆฌ) + ๋ธ๋ก๋ฒํธ(6์๋ฆฌ) + ๋ก์ฐ๋ฒํธ(3์๋ฆฌ) => 10byte
and-equal, index Combine, index join
IOT, ํด๋ฌ์คํฐ ํ ์ด๋ธ, ํํฐ์ ๋
Logical Rowid = PK + physical guess
grace ํด์์กฐ์ธ, hybrid ํด์์กฐ์ธ, recursive ํด์์กฐ์ธ, ๋นํธ ๋ฒกํฐ ํํฐ๋ง
์์ฐํฐ ์กฐ์ธ์ ํํธ ์ ๋จนํ
ํ๋ก์ธ์ค - PGA 1:1
์ธ์
- UGA 1:1
๋ณ๋ ฌ update ์ qc ์์ update ์คํผ๋ ์ด์ ์ qc๊ฐ ์ฒ๋ฆฌ
ํํธ ์ฌ์ด์ ์ฝค๋ง(,) ์ฌ์ฉ ๊ธ์ง
์คํค๋ง๋ช ์ฌ์ฉ ๊ธ์ง (JI.EMP)
Alias ์ง์ ์ ๋ฐ๋์ ์ฌ์ฉ
ํ๋์ ๋ธ๋ก์ ๋ ๊ฐ ์ด์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๋ฐ์
->๋ฒํผ Lock์ ํตํด ์ง๋ ฌํ, ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฉด์๋ ์บ์ ๊ฒฝํฉ์ ์ค์ด๋ ค๋ฉด, SQL ํ๋์ ํตํด ์ฟผ๋ฆฌ ์ผ๋ ์์ฒด๋ฅผ ์ค์ฌ์ผํ๋ค.
ํํฐ ์คํผ๋ ์ด์
= Nested Loops ์ ๊ฐ์ ์๋ฆฌ๋ก ์๋
๋ถ๋ถ๋ฒ์์ฒ๋ฆฌ๋ ๊ฐ๋ฅ
-> ๋ค๋ฅธ์ ์
์กฐ์ธ ์กฐ๊ฑด pushdown ๊ธฐ๋ฅ์ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์กฐ์ธ ์กฐ๊ฑด์ from ์ ์ธ๋ผ์ธ ๋ทฐ์ ๋ฃ์
-> ๋ถ๋ถ๋ฒ์์ฒ๋ฆฌ ๊ฐ๋ฅ
Lateral, Outer/Cross Apply ์กฐ์ธ ์ฌ์ฉํ๋ฉด from ์ ์์ ๋ฉ์ธ์ฟผ๋ฆฌ ์ปฌ๋ผ ์ฐธ์กฐ ๊ฐ๋ฅ
=> ์ด ๋ฐฉ์๋ค์ ์กฐ์ธ ์กฐ๊ฑด pushdown ๊ธฐ๋ฅ์ด ์ ์๋ํ์ง ์์ ๋๋ง ์ฌ์ฉ
order by ์์ด group by๋ง ์ฌ์ฉ ์ sort group by ์คํผ๋ ์ด์
๋ฐ์ํ์ง๋ง ์ ๋ ฌ์ ์๋
์ํ
์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ๊ทธ๋ฃนํ ํ๋ค!
์ฌ๊ธฐ์ ์ ๋ ฌ๋ ๊ฒฐ๊ณผ์งํฉ์ ์ํ๋ฉด order by ๋ช
์ํด์ฃผ๋ฉด๋จ
unnesting๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ m์ชฝ ์งํฉ์ด๊ฑฐ๋ 1์ชฝ์งํฉ์ด์ฌ๋ ์กฐ์ธ ์ปฌ๋ผ์ unique ์ธ๋ฑ์ค๊ฐ ์์ ์ ์ค๋ณต์ ์ ๊ฑฐํด ์ฃผ์ด์ผ ๋๋๋ฐ ์ด ๋ Sort Unique ์คํผ๋ ์ด์ ๋ฐ์
์ค๋ณต ์์ ์ Sort Unique ์คํผ๋ ์ด์ ์ ์๋ต๋จ
default : commiit write immediate wait; -> ์ปค๋ฐ ๋ช
๋ น์ ๋ฐ์ ๋ ๋ง๋ค LGWR๊ฐ ๋ก๊ทธ ๋ฒํผ๋ฅผ ํ์ผ์ ์ฆ์ ๊ธฐ๋ก / ๊ธฐ๋กํ ๋ ๊น์ง ๊ธฐ๋ค๋ฆผ
option : immediate -> batch / wait -> nowait

๋ค์ค ํธ๋์ญ์ ์ ์ํ ๋์ ์ฑ๋ฒ์ด ๋ง์ง ์์ผ๋ฉด ์๋ฌด๊ฑฐ๋ ์จ๋ ๊ด์ฐฎ
์ฑ๋ฒ ํ ์ด๋ธ์ด๋ ์ค๋ธ์ ํธ ๊ด๋ฆฌ ๋ถ๋ด -> max +1 ๋ฐฉ์ ์ฌ์ฉ
๋ค์ค ํธ๋์ญ์ ์ ์ํ ๋์ ์ฑ๋ฒ์ด ๋ง๊ณ pk๊ฐ ๋จ์ผ์ปฌ๋ผ ์ผ๋ จ๋ฒํธ๋ฉด ์ํ์ค ๋ฐฉ์ ์ฌ์ฉ
๋ค์ค ํธ๋์ญ์
์ ์ํด ๋์ ์ฑ๋ฒ์ด ๋ง๊ณ pk ๊ตฌ๋ถ ์์ฑ์ ๊ฐ ์ข
๋ฅ ๊ฐ์๊ฐ ๋ง์ผ๋ฉด ์ํ์ค ๋ณด๋ค๋ max+1
๋จ, ์ฑ๋ฅ ๋ฌธ์ ์ ์ํ์ค ์ค๋ธ์ ํธ ํ์ฉ
์ธ๋ฑ์ค ๋ธ๋ก ๊ฒฝํฉ ํด์ -> ์ธ๋ฑ์ค ํด์ ํํฐ์
๋
๋ฆฌ๋ฒ์ค ํค ์ธ๋ฑ์ค๋ก ์ ํํ๋ ๋ฐฉ๋ฒ๋ ๊ณ ๋ ค
alter table ji_table modify constraint ji_table_index disable drop index;
alter session enable parallel dml;
alter table ji_table nologging;
insert /*+ append parallel(ji_table 4) */ into ji_table
select ~
alter table ji_table modify constraint ji_table_index enable novalidate;
alter table ji_table logging;
alter table disable parallel dml;
create table emp_temp
nologging
as
select * from emp where 1 = 2;
insert /*+ append */ into emp_temp e
select empno, edate, ...
, case when ์ํ์ฝ๋ <> 'AAA' then 'AAA' else ์ํ์ฝ๋ end) ์ํ์ฝ๋
from emp
where edate < '20260101';
create unique index emp_temp_pk on emp_temp (empno) nologging;
create index emp_temp_x1 on emp_temp (edate) nologging;
alter table emp
exchange partition p202512 with table emp_temp
including indexes without validation;
drop table emp_temp;
alter table emp modify partition p202512 logging;
alter table emp_pk modify parition p202512 logging;
alter table emp_x1 modify parition p202512 logging;
create table emp_temp
nologging
as
select * from emp where 1 = 2;
insert /*+ append */ into emp_temp
select * from emp partition (202402) where c2 != 'Y';
alter table emp truncate partition(202402);
alter table emp nologging;
insert /*+ append */ into emp
select * from emp_temp;
drop table emp_temp;
alter table emp logging;
px_join_filter / no_px_join_filter (+ no_merge, where์ ํํฐ ์กฐ๊ฑด)
SELECT /*+ LEADING(T1) NO_MERGE(V1) PX_JOIN_FILTER(V1) */
T1.PRDT_ID
,V1.SALES_AMT
FROM TB_PRDT T1
,(
SELECT PRDT_ID , SUM(TRD_AMT) AS SALES_AMT
FROM TN_TRADE
GROUP BY PRDT_ID --group by
) V1
WHERE T1.PRDT_ID IN (1000, 2000, 3000) -- ํํฐ ์กฐ๊ฑด
AND T1.PRDT_ID = V1.PRDT
index skew ํ์ชฝ์ผ๋ก ์น์ฐ์น๋ ํ์
index sparse ๋ฐ๋๊ฐ ๋จ์ด์ง๋ ํ์
create index emp_x1 on emp(empno, job);
CTAS๋ฌธ ์ nologging ๋ชจ๋๋ก ํ ์ด๋ธ ๋ง๋ค๊ธฐ
create table ji_table
nologging
as
select ~
update ์์ ์ฌํญ table ๋ง๋ค ๋ ๊ทธ๋ฅ ๋ฃ์ด๋ฒ๋ฆฌ๋ ๊ฑฐ ๊ณ ๋ ค
-> update ์ ํด๋๋จ.
PL/SQL for loop -> one sql๋ก ๊ตฌํํ๊ธฐ
merge into table_a
using (table_b)
on ( )
when matched then
~
when not matched then
~
update -> merge ๋ฌธ ๋ณ๊ฒฝ ์ ์๋์ฐ ํจ์ ์ฌ์ฉ ๊ฐ๋ฅ.
set transaction isolation level serializable;
-- ํธ๋์ญ์
๊ณ ๋ฆฝํ ์์ค serializable ๊น์ง ์ฌ๋ฆฌ๊ธฐ
ํด์์กฐ์ธ -> build input - ์ ์ฒด๋ฒ์์ฒ๋ฆฌ, probe input - ๋ถ๋ถ๋ฒ์์ฒ๋ฆฌ ๊ฐ๋ฅ
์ํธ๋จธ์ง์กฐ์ธ -> ์ ์ฒด ์ผ๋์ ๊ฒ์์กฐ๊ฑด์ ์ํด ๊ฒฐ์
exists ->semi join ๋ณํ
not exists -> anti join ๋ณํ
non-repeated read -> ๋ค๋ฅธ ํธ๋์ญ์
์์ ์์
phantom read -> ๋ค๋ฅธ ํธ๋์ญ์
์์ ์ฝ์
sqlserver -> ๋ณ๊ฒฝ์ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ณ๊ฒฝ ํ ๊ฐ์ ์์ ํจ
oracle -> ๋ณ๊ฒฝ์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ณ๊ฒฝ ์ ๊ฐ์ ์์ ํจ
์ถ์ํ : ํ์ค์ธ๊ณ๋ฅผ ์ผ์ ํ ํ์์ ๋ง์ถ์ด ํํ์ ํ๋ค๋ ์๋ฏธ
๋จ์ํ : ๋ณต์กํ ํ์ค์ธ๊ณ๋ฅผ ์ฝ์๋ ๊ท์ฝ์ ์ํด ์ ํ๋ ํ๊ธฐ๋ฒ์ด๋ ์ธ์ด๋ก ํํ
๋ช
ํํ : ๋๊ตฌ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋์์ ๋ํ ์ ๋งค๋ชจํธํจ์ ์ ๊ฑฐ
๋ฐ์ดํฐ๊ด์ + ํ๋ก์ธ์ค๊ณผ์ + ๋ฐ์ดํฐํ๋ก์ธ์ค ์๊ด๊ด์
์ ๋ณด์์คํ
์ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ฐ์ดํฐ ๊ด์ ์ ์
๋ฌด ๋ถ์ ๊ธฐ๋ฒ
ํ์ค์ธ๊ณ์ ๋ฐ์ดํฐ์ ๋ํด ์ฝ์๋ ํ๊ธฐ๋ฒ์ ์ํด ํํํ๋ ๊ณผ์
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ถ์, ์ค๊ณ์ ๊ณผ์
๋ช ์ธํ, ๊ตฌ์กฐํ, ๋ฌธ์ํ, ๋ค์ํ ๊ด์ , ์์ธ์์ค์ ํํ
ํ๊ธํจ๊ณผ(Leverage)
๋ณต์กํ ์๊ตฌ์ฌํญ์ ๊ฐ๊ฒฐํ ํํ(Conciseness)
๋ฐ์ดํฐ ํ์ง(Data Quailty)
๊ฐ๋
์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง : ์ถ์ํ, ์
๋ฌด์ค์ฌ์ , ํฌ๊ด์ , ์ ์ฌ์ , EA์๋ฆฝ์ ์ฌ์ฉ
๋
ผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง : KEY, ์์ฑ, ๊ด๊ณ ํํ, ์ฌ์ฌ์ฉ์ฑ ๋์
๋ฌผ๋ฆฌ์ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง : ์ค์ DBMS์ ์ด์, ๋ฌผ๋ฆฌ์ ์ธ ์ฑ๊ฒฉ ๊ณ ๋ ค
๋ ผ๋ฆฌ์ ๋ ๋ฆฝ์ฑ : ๊ฐ๋ ์คํค๋ง ๋ณ๊ฒฝ, ์ธ๋ถ์คํค๋ง ์ํฅ ์์, ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ์์ฉํ๋ก๊ทธ๋จ ์ํฅ์์
๋ฌผ๋ฆฌ์ ๋ ๋ฆฝ์ฑ : ๋ด๋ถ์คํค๋ง ๋ณ๊ฒฝ, ์ธ๋ถ/๊ฐ๋ ์คํค๋ง ์ํฅ ์์, ์ ์ฅ์ฅ์น์ ๊ตฌ์กฐ๋ณ๊ฒฝ์ ์์ฉํ๋ก๊ทธ๋จ๊ณผ ๊ฐ๋ ์คํค๋ง์ ์ํฅ์์
์ธ๋ถ/๊ฐ๋ ์ ์ฌ์(๋ ผ๋ฆฌ์ ์ฌ์) : ์ธ๋ถ์ ๋ทฐ์ ๊ฐ๋ ์ ๋ทฐ์ ์ํธ ๊ด๋ จ์ฑ ์ ์(๊ฐ๋ ์ ๋ทฐ์ ํ๋ ํ์ ์ ๋ณํ ์์)
๊ฐ๋ /๋ด๋ถ์ ์ฌ์(๋ฌผ๋ฆฌ์ ์ฌ์) : ๊ฐ๋ ์ ๋ทฐ์ DBMS๊ฐ์ ์ํธ ๊ด๋ จ์ฑ ์ ์(DB๊ตฌ์กฐ ๋ณ๊ฒฝ์ ๊ฐ๋ ์ /๋ด๋ถ์ ์ฌ์์ด ๋ฐ๋์ด์ผ ๊ฐ๋ ์ ์คํค๋ง๊ฐ ๊ทธ๋๋ก ๋จ์)
์ด๋ค๊ฒ(Things), ์ฑ๊ฒฉ(Attributes), ๊ด๊ณ(Relationships)
DBA, ๊ฐ๋ฐ์(๊ฐ์ฅ์ค์), ํ์ ์ ๋ฌด์ ๋ฌธ๊ฐ, ์ ๋ฌธ ๋ชจ๋ธ๋ฌ
์์ ์ฑ(Completeness)
์ค๋ณต๋ฐฐ์ (Non-Redundancy)
์
๋ฌด๊ท์น(Business Rules)
๋ฐ์ดํฐ์ฌ์ฌ์ฉ(Data Reusuability)
์์ฌ์ํต(Communication)
ํตํฉ์ฑ(Integration)
๋ฐ๋์ ํ์, ์๋ณ๊ฐ๋ฅ, ์์์ ์ผ๋ก ์กด์ฌ(๋๊ฐ์ด์), ์ ๋ฌดํ๋ก์ธ์ค ์ด์ฉ, ์์ฑํ์, ๊ด๊ณํ์
์ ๋ฌดํ : ์ ํ์ํฐํฐ, ๊ฐ๋
์ํฐํฐ, ์ฌ๊ฑด์ํฐํฐ
๋ฐ์์์ : ๊ธฐ๋ณธ์ํฐํฐ, ์ค์ฌ์ํฐํฐ, ํ์์ํฐํฐ
๊ธฐ๋ณธ์์ฑ(์ด๋ฆ), ์ค๊ณ์์ฑ(์ฝ๋), ํ์์์ฑ(ํฉ๊ณ)
์ ์ผ์ฑ, ์ต์์ฑ, ๋ถ๋ณ์ฑ, ์กด์ฌ์ฑ
๋ํ์ฑ ์ฌ๋ถ (์ฃผ์๋ณ์, ๋ณด์กฐ์๋ณ์)
์ค์ค๋ก์์ฑ ์ฌ๋ถ (๋ด๋ถ์๋ณ์, ์ธ๋ถ์๋ณ์)
๋จ์ผ์์ฑ ์ฌ๋ถ(๋จ์ผ ์๋ณ์, ๋ณตํฉ์๋ณ์)
๋์ฒด ์ฌ๋ถ(๋ณธ์ง์๋ณ์, ์ธ์กฐ์๋ณ์)
์๋ณ์ ๊ด๊ณ : ๋ถ๋ชจ๋ก ๋ฐ์ ์๋ณ์๋ฅผ ์์ ์ํฐํฐ์ ์ฃผ์๋ณ์๋ก ์ด์ฉ
๋น์๋ณ์ ๊ด๊ณ : ๋ถ๋ชจ๋ก ๋ถํฐ ์์ฑ์ ๋ฐ์์ง๋ง ์ฃผ์๋ณ์๋ก ์ฌ์ฉํ์ง ์๊ณ ์ผ๋ฐ ์์ฑ์ผ๋ก ์ฌ์ฉ
์ฝํ ๊ด๊ณ, ๋ ๋ฆฝ PK๊ตฌ์ฑ, PK์์ฑ ๋จ์ํ๋ฅผ ์ํด์ ๊ณ ๋ ค
๊ฐํ ๊ด๊ณ, ์ฃผ์๋ณ์ PK์ฌ์ฉ
๋ฐ์ดํฐ๋ค์ด ์ด๋ค ๊ธฐ์ค๊ฐ์ ์ํด ์ข
์๋๋ ํ์์ ์ง์นญํ๋ค.
๊ธฐ์ค๊ฐ์ ๊ฒฐ์ ์, ์ข
์๋๋ ๊ฐ์ ์ข
์์ ๋ผ๊ณ ํ๋ค.
ex) ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ -> (์ด๋ฆ,์ถ์์ง,์ฃผ์)
1) ํ
์ด๋ธ ๋ฐ์ ๊ทํ
ํ
์ด๋ธ ๋ณํฉ(1:1, 1:M, ์ํผ/์๋ธํ์
), ํ
์ด๋ธ ๋ถํ (์์ง,์ํ), ํ
์ด๋ธ ์ถ๊ฐ(์ค๋ณต, ํต๊ณ, ์ด๋ ฅ, ๋ถ๋ถ)
2) ์นผ๋ผ ๋ฐ์ ๊ทํ
์ค๋ณต์นผ๋ผ ์ถ๊ฐ, ํ์์นผ๋ผ ์ถ๊ฐ, ์ด๋ ฅํ
์ด๋ธ ์นผ๋ผ ์ถ๊ฐ, PK์ ์ํ ์นผ๋ผ ์ถ๊ฐ, ์์ฉ์์คํ
์ค์๋์ ์ํ ์นผ๋ผ ์ถ๊ฐ
3) ๊ด๊ณ ๋ฐ์ ๊ทํ
์ค๋ณต๊ด๊ณ ์ถ๊ฐ
๊ณตํต์ ๋ถ๋ถ์ ์ํผํ์ ์ผ๋ก ๋ชจ๋ธ๋ง, ๋ค๋ฅธ ์ํฐํฐ์ ์ฐจ์ด๊ฐ ์๋ ์์ฑ์ ๋ํด์ ๋ณ๋์ ์๋ธ ์ํฐํฐ๋ก ๊ตฌ๋ถ
1) OneToOne Type
๊ฐ๋ณํ
์ด๋ธ, ํ์ ์ฑ ์ฐ์, ์กฐ์ธ์ฑ๋ฅ ๋์จ, I/O ์ข์, ๊ด๋ฆฌ์์ข์
2) Plus Type
์ํผ์๋ธํ์
ํ
์ด๋ธ, ํ์ ์ฑ ๋ณดํต, ์กฐ์ธ์ฑ๋ฅ ๋์จ, I/O์ข์, ๊ด๋ฆฌ์์ข์
3) Single Type
ํ๋์ ํ
์ด๋ธ, ํ์ ์ฑ ๋์จ, ์กฐ์ธ์ฑ๋ฅ ์ฐ์, I/O๋์จ, ๊ด๋ฆฌ์ข์
๋ถํ ํฌ๋ช ์ฑ, ์์นํฌ๋ช ์ฑ, ์ง์ญ์ฌ์ ํฌ๋ช ์ฑ, ์ค๋ณตํฌ๋ช ์ฑ, ์ฅ์ ํฌ๋ช ์ฑ, ๋ณํํฌ๋ช ์ฑ
์ฅ์ : ์ง์ญ์์น์ฑ, ์ ์ฆ์ ์์คํ ์ฉ๋ํ์ฅ, ์ ๋ขฐ์ฑ,๊ฐ์ฉ์ฑ, ํจ์ฉ์ฑ, ์ตํต์ฑ, ๋น ๋ฅธ ์๋ต, ํต์ ๋น์ฉ์ ๊ฐ, ๋ฐ์ดํฐ๊ฐ์ฉ์ฑ, ์ ๋ขฐ์ฑ, ์์คํ ๊ท๋ชจ์กฐ์ , ์๊ตฌ์์ฉ ์ฆ๋
๋จ์ : ๋น์ฉ, ์ค๋ฅ์ ์ฌ์ฑ์ฆ๋,์ฒ๋ฆฌ๋น์ฉ,์ค๊ณ๊ด๋ฆฌ๋ณต์ก์ฑ,๋ถ๊ท์นํ์๋ต์๋,ํต์ ์ด๋ ค์,๋ฐ์ดํฐ๋ฌด๊ฒฐ์ฑ์ํ
1) ์์น๋ถ์ฐ
2) ๋ถํ ๋ถ์ฐ : ์ํ๋ถํ , ์์ง๋ถํ
3) ๋ณต์ ๋ถ์ฐ : ๋ถ๋ถ๋ณต์ (ํตํฉ๋๊ฑด ๋ณธ์ฌ, ๊ฐ์ง์ฌ๋ณ๋ก ํด๋น๋ก์ฐ), ๊ด์ญ๋ณต์ (๋ณธ์ฌ,์ง์ฌ๋ชจ๋ ๋์ผํ ๋ฐ์ดํฐ ๊ฐ์ง๊ณ ์์)
4) ์์ฝ๋ถ์ฐ : ๋ถ์์์ฝ(๊ฐ์ง์ฌ๋ณ๋ก ์์ฝ, ๋ณธ์ฌ์ ํตํฉ), ํตํฉ์์ฝ(๊ฐ์ง์ฌ๋ณ๋ก ์กด์ฌํ๋ ๋ค๋ฅธ ๋ด์ฉ์ด ์ ๋ณด์์ฝ, ๋ณธ์ฌ์ ํตํฉ)
ALTER TABLE PLAYER ADD CONSTRAINT PLAYER_FK FOREIGN KEY (TEAM_ID) REFERENCES TEAM(TEAM_ID);
์์์ฑ(Atomicity), ์ผ๊ด์ฑ(Consistency), ๊ณ ๋ฆฝ์ฑ(Isolation), ์ง์์ฑ(Durability)
SELECT RTRIM('XXXYYY ', ' ') FROM DUAL; -> "XXXYYY"
SELECT LTRIM('XXXYYY ', 'X') FROM DUAL; -> ""YYY "
SELECT SIGN(-00) FROM DUAL; -> 0
SELECT SIGN(-100) FROM DUAL; -> -1
SELECT SIGN(100) FROM DUAL; -> 1
SELECT CEIL(38.123) FROM DUAL; -> 39
SELECT CEIL(-38.123) FROM DUAL; -> -38
SELECT FLOOR(38.123) FROM DUAL; -> 38
SELECT FLOOR(-38.123) FROM DUAL; -> -39
SELECT ROUND(38.5235, 3) FROM DUAL; -> 38.524
SELECT ROUND(38.5235, 1) FROM DUAL; -> 38.5
SELECT ROUND(38.5235, 0) FROM DUAL; -> 39
SELECT ROUND(38.5235) FROM DUAL; -> 39
SELECT TRUNC(38.5235, 3) FROM DUAL; -> 38.523
SELECT TRUNC(38.5235, 1) FROM DUAL; -> 38.5
SELECT TRUNC(-38.5235, 1) FROM DUAL; -> -38.5
SELECT TRUNC(38.5235, 0) FROM DUAL; -> 38
SELECT TRUNC(38.5235) FROM DUAL; -> 38
SELECT NULLIF('1', '1') FROM DUAL; -> NULL
SELECT COALESCE(NULL, '2', '1') FROM DUAL; -> '2'
๋ ๋ฆฝ์ฑ, ํธ๋ฆฌ์ฑ, ๋ณด์์ฑ
UNION ์ฐ์ฐ์ UNION ๊ธฐ๋ฅ์ผ๋ก
INTERSECTION ์ฐ์ฐ์ INTERSECT ๊ธฐ๋ฅ์ผ๋ก
DIFFERENCE ์ฐ์ฐ์ EXCEPT, MINUS ๊ธฐ๋ฅ์ผ๋ก
PRODUCT ์ฐ์ฐ์ CROSS JOIN ๊ธฐ๋ฅ์ผ๋ก
SELECT์ฐ์ฐ์ WHERE์ ๋ก ๊ตฌํ
PROJECT์ฐ์ฐ์ SELECT ์ ๋ก ๊ตฌํ
NATURAL JOIN์ฐ์ฐ์ ๋ค์ํ JOIN๊ธฐ๋ฅ์ผ๋ก ๊ตฌํ
DIVIDE์ฐ์ฐ์ ํ์ฌ ์ฌ์ฉ๋์ง ์๋๋ค.
์๋ฐฉํฅ
SELECT
LEVEL, LPAD(' ', 4*(LEVEL-1)) || EMPNO, MGR, CONNECT_BY_ISLEAF
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
์ญ๋ฐฉํฅ
SELECT
LEVEL,
LPAD(' ', 4*(LEVEL-1))||EMPNO,
MGR, CONNECT_BY_ISLEAF
FROM EMP
START WITH EMPNO = 7876
CONNECT BY PRIOR MGR = EMPNO;
ํจ์คํจ์
SELECT
CONNECT_BY_ROOT EMPNO,
SYS_CONNECT_BY_PATH(EMPNO, '/') ,
EMPNO, MGR
FROM EMP
START WITH MGR IS NULL
CONNECT BY PRIOR EMPNO = MGR;
SELECT
CASE GROUPING(DNAME) WHEN 1 THEN '๋ชจ๋ ๋ถ์' ELSE DNAME END AS DNAME,
CASE GROUPING(JOB ) WHEN 1 THEN '๋ถ์๋ณ' ELSE JOB END AS JOB,
--,
COUNT(*),
SUM(SAL)
FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
--GROUP BY ROLLUP(DNAME, JOB)
--GROUP BY DNAME, ROLLUP(JOB)
--GROUP BY ROLLUP(DNAME, (JOB,MGR))
--GROUP BY CUBE(DNAME, JOB)
GROUP BY GROUPING SETS(DNAME, JOB)
ORDER BY DNAME, JOB;
์ฌ๋ฌ ์ธ์คํด์ค๊ฐ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ก์ธ์ค ํ ์ ์๋ค.
ํ๋์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ก์ธ์ค ํ ์ ์๋ค.
์ฌ์ฉ์์ ๊ฐฑ์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์์ ๋ฒํผ ๋ธ๋ก์๋ง ๊ธฐ๋ก๋ ์ฑ ์์ง ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์๋๋ผ๋ Redo๋ก๊ทธ๋ฅผ ๋ฏฟ๊ณ ๋น ๋ฅด๊ฒ ์ปค๋ฐ์ ์๋ฃ, ์ธ์คํด์ค ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ก๊ทธํ์ผ์ ์ด์ฉํด ์ธ์ ๋ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ฏ๋ก ์์ฌํ๊ณ ์ปค๋ฐ์ ์๋ฃ
๋ฒํผ ์บ์ ๋ธ๋ก์ ๊ฐฑ์ ํ๊ธฐ ์ ์ ๋ณ๊ฒฝ์ฌํญ์ ๋จผ์ ๋ก๊ทธ ๋ฒํผ์ ๊ธฐ๋ก, Dirty ๋ฒํผ๋ฅผ ๋์คํฌ์ ๊ธฐ๋กํ๊ธฐ ์ ์ ํด๋น ๋ก๊ทธ ์ํธ๋ฆฌ๋ฅผ ๋จผ์ ๋ก๊ทธ ํ์ผ์ ๊ธฐ๋ก
DBMS๋ด๋ถ์์ ๋ฐ์ํ๋ Call, SQLํ์์ ์ต์ ํ ๊ณผ์ ์์ ๋ฐ์ํ๋ ๋ฐ์ดํฐ ์ฌ์ ์กฐํ, ์ฌ์ฉ์ ์ ์ํจ์/ํ๋ก์์ ๋ด์์ SQL์ํ, ํด๋น ์ฝ์ ์ต์ํํ๊ธฐ ์ํด์๋ ๋ฐ์ธ๋๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ํ์ฑ ์ค์ด๊ณ , ์ฌ์ฉ์์ ์ํจ์ ๋ฐ ํ๋ก์์ ์ ๋ฌด๋ถ๋ณํ ์ฌ์ฉ ๊ธ์ง
์ฌ์ฉ์์ ์ํจ์/ํ๋ก์์ ๋ ๋ด์ฅํจ์์ฒ๋ผ native์ฝ๋๋ก ์์ ์ปดํ์ผ๋ ํํ๊ฐ ์๋์ด์ ๊ฐ์๋จธ์ ๊ฐ์ ๋ณ๋์ ์คํ์์ง ์ฌ์ฉ, ์คํ๋ ๋๋ง๋ค ๋ฌธ๋งฅ์ ํ์ด ์ผ์ด๋๋ฉฐ, ๋ด์ฅํจ์๋ฅผ ํธ์ถํ ๋์ ๋น๊ตํด ์ฑ๋ฅ์ ๋จ์ด๋จ๋ฆฐ๋ค.
๊ทธ๋ฌ๋ฏ๋ก ์๋์ ๋ฐ์ดํฐ ์ผ๋ ํน์ ๋ถ๋ถ๋ฒ์์ฒ๋ฆฌ ์ํฉ์์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ๋ค.
์์์ฑ, ์ผ๊ด์ฑ, ๊ฒฉ๋ฆฌ์ฑ, ์์์ฑ
set transaction isolation level read serializable;
udno ์์ญ ํฌ๊ธฐ ์ฆ๊ฐ, ์ปค๋ฐ ์์ฃผ X, fetch across commit X, ํธ๋์ญ์ ์๊ฐ ์กฐ์ , ํ ์ด๋ธ ๋๋์ด ๋จ๊ณ์ ์ผ๋ก ์ฝ๋ฉ, NL์กฐ์ธํํ ์ง์, ์ํธ์ฐ์ฐ ๋ฐ์, ๋๋์ ๋ฐ์ดํธํ full์ค์บ
์ค๋ผํด์ Logical Rowid = PK + Physical Guess ๋ฅผ ์ฌ์ฉํ๋ค.
Physical Guess = Secondary index๋ฅผ ์ต์ด ์์ฑํ๊ฑฐ๋ ์ฌ์์ฑํ ์์ ์ DBA
Physical Guess๋ฅผ ์ฐพ์๊ฐ๋ค๊ฐ ์์ผ๋ฉด PK๋ก ํ์
์ซ์ํ๊ณผ ๋ฌธ์ํ์ด ๋ง๋๋ฉด -> ๋ฌธ์ํ์ ์ซ์ํ์ผ๋ก ํ๋ณํ
insert select ๋ฌธ์ฅ์ /+ append / ํํธ ์ฌ์ฉ
๋ณ๋ ฌ๋ชจ๋ insert
CTAS ๋ฌธ์ฅ์ ์ํ
์ฃผ์์ฌํญ : Direct Path Insert์ ํ ์ด๋ธ Lock๊ฑธ๋ฆผ
A. Database Recovery
Media Fail ๋ฐ์์ DBMS ๋ณต๊ตฌ
Archived Redo Log ์ด์ฉ
B. Cache Recovery
Instance Recovery ๋ผ๊ณ ๋ ํ๋ค
๋ฒํผ์บ์์ ์ ์ฅ๋ ๋ณ๊ฒฝ์ฌํญ์ด ๋์คํฌ์ ์ ์ฅ ๋์ง ์์์ฑ ์ ์ ์ด ๋ฐ์ํ๋ฉด Online Redo Log๋ฅผ ์ฝ์ด๋ค์ฌ
๋ง์ง๋ง ์ฒดํฌํฌ์ธํธ์ดํ๋ถํฐ ์ฌ๊ณ ๋ฐ์ ์ง์ ๊น์ง ์ํ๋์๋ ํธ๋์ญ์
์ฌํํ๋ค.
๋ค๋ฅธ๋ง๋ก Roll Forward ๋จ๊ณ๋ผ๊ณ ํ๋ค.
C. Fast Commit
์ฌ์ฉ์์ ๊ฐฑ์ ๋ด์ฉ์ด ๋ฉ๋ชจ๋ฆฌ์์ ๋ฒํผ ๋ธ๋ก์๋ง ๊ธฐ๋ก๋์ฑ ์์ง ๋์คํฌ์ ๊ธฐ๋ก๋์ง ์์์ง๋ง Redo Log๋ฅผ ๋ฏฟ๊ณ ๋น ๋ฅด๊ฒ ์ปค๋ฐ์ ์๋ฃ
๋ฒํผ ์บ์์ ์๋ ๋ธ๋ก ๋ฒํผ๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ ์ Redo ์ํธ๋ฆฌ ๋ก๊ทธ๋ฒํผ์ ๊ธฐ๋กํด์ผ ํ๋ฉฐ, DBWR์ด ๋ฒํผ์บ์๋ก ๋ถํฐ Dirty ๋ธ๋ก๋ค์ ๋์คํฌ์ ๊ธฐ๋กํ๊ธฐ ์ ์ ๋จผ์ LGWR์ด ํด๋น Redo ์ํธ๋ฆฌ๋ฅผ ๋ชจ๋ Redo๋ก๊ทธ ํ์ผ์ ๊ธฐ๋กํ์์ด ๋ณด์ฅ๋์ด์ผ ํ๋ค.
A. Transaction Rollback
ํธ๋์ญ์ ์ ์ํ ๋ณ๊ฒฝ์ฌํญ์ ์ต์ข ์ปค๋ฐํ์ง ์๊ณ ๋กค๋ฐฑํ๊ณ ์ ํ ๋ Undo ๋ฐ์ดํฐ๋ฅผ ์ด์ฉ
B. Transaction Recovery
Instance Crash ๋ฐ์ํ Redo๋ฅผ ์ด์ฉํด Roll Forward ๋จ๊ณ์๋ฃํ ์์คํ ์ด ์ ง๋ค์ด ์์ ์ ์์ง ์ปค๋ฐ๋์ง ์์๋ ํธ๋์ญ์ ๋ค์ ๋ชจ๋ ๋กค๋ฐฑํ ๋ Undo ์ธ๊ทธ๋จผํธ์ ์ ์ฅ๋ Undo๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
C. Read Consistency
์ฝ๊ธฐ ์ผ๊ด์ฑ์ ์ํด์ ์ฌ์ฉ๋๋ค.
๋จ์ผ SQL๋ฌธ์ด ์ํ๋๋ ๋์ค์ ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ๋ฐ์ดํฐ์ ์ถ๊ฐ, ๋ณ๊ฒฝ, ์ญ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ์ผ๊ด์ฑ์๋ ๊ฒฐ๊ณผ ์งํฉ์ ๋ฆฌํดํ๋ ๊ฒ์ด๋ค.
SELECT๋ Consistent ๋ชจ๋๋ก ์ฝ๋๋ค.
INSERT, UPDATE, DELETE, MERGE ๋ Current ๋ชจ๋๋ก ์ฝ๊ณ ์ด๋ค. ๋ค๋ง, ๊ฐฑ์ ํ ๋์ ๋ ์ฝ๋๋ฅผ ์๋ณํ๋ ์์ ์ Consistent ๋ชจ๋๋ก ์ด๋ฃจ์ด์ง๋ค.
ํธ๋์ญ์ ์ ์ํด ์ค์ ๋ Row Lock์ ํด์ ํ๊ณ ๋ธ๋กํค๋์ ์ปค๋ฐ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ์คํผ๋ ์ด์
A. Delayed ๋ธ๋ก ํด๋ฆฐ ์์
ํธ๋์ญ์ ์ด ๊ฐฑ์ ํ ๋ธ๋ก ๊ฐ์๊ฐ ์ด ๋ฒํผ ๋ธ๋ก๊ฐ์์ 10%๋ฅผ ์ด๊ณผ์ ITL์ฌ๋ก์ ์ปค๋ฐ ์ ๋ณด์ ์ฅํ๊ณ ๋ ์ฝ๋์ ๊ธฐ๋ก๋ Lock Byte ํด์ ํ๊ณ Online Redo์ Logging
B. ์ปค๋ฐ ํด๋ฆฐ์์
Online Redo๋ก๊ทธ๋ฅผ ๋จ๊ธฐ์ง ์๊ณ ๋ก๊น ์์ ์ ๋ค๋ก ๋ฏธ๋ฃฌํ ํด๋น ๋ธ๋ก์ ๊ฐฑ์ ํ๋ ค๊ณ Current๋ชจ๋๋ก ์ฝ๋ ์์ ์ Lock Byte๋ฅผ ํด์ ํ๊ณ ์์ ํ ํด๋ฆฐ์์์ ์ํํ๋ค.
A. ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ๋ด๋ ค๊ฐ๋ค๊ฐ ์ฟผ๋ฆฌ SCN์ดํ์ ๋ณ๊ฒฝ๋ ๋ธ๋ก์ ๋ง๋ ๊ณผ๊ฑฐ์์ ์ผ๋ก ๋กค๋ฐฑํ Read Consistent ์ด๋ฏธ์ง๋ฅผ ์ป์ผ๋ ค๊ณ ํ๋๋ฐ Undo๋ธ๋ก์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์ฌ์ฌ์ฉ๋ผ ํ์ํ Undo์ ๋ณด๋ฅผ ์ป์์ ์๋๊ฒฝ์ฐ ๋ฐ์ํ๋ค.
B. ์ปค๋ฐ๋ ํธ๋์ญ์ ํ ์ด๋ธ ์ฌ๋กฏ์ด ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ํด ์ฌ์ฌ์ฉ๋ผ ์ปค๋ฐ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐ์ํ๋ค. (Undo ์ธ๊ทธ๋จผํธ ๊ฐ์๊ฐ ์ ์)
์ปค๋ฐ ์์ฃผ ํ์ง ๋ง๊ฒ, ํธ๋์ญ์ ๋ชฐ๋ฆฌ๋ ์๊ฐ๋๋ฅผ ํผํด์ ๋๋ฆฐ๋ค, ํฐ ํ ์ด๋ธ์ ์ผ์ ์๋ก ๋๋ ์ ์์
์ค๋์๊ฐ์ ๊ฑธ์ณ ๊ฐ์ ๋ธ๋ก์ ์ฌ๋ฌ๋ฒ ๋ฐฉ๋ฌธํ๋ NL ์กฐ์ธ ํํ์์ ์ธ๋ฑ์ค๋ฅผ ๊ฒฝ์ ํ ํ ์ด๋ธ ์ก์ธ์ค๊ฐ ์๋์ง ํ์ธํ์ฌ ํ ํ ์ด๋ธ ์ค์บ ํน์ ์กฐ์ธ๋ฐฉ์ ๋ณ๊ฒฝ์ผ๋ก ์ ๋ํ๋ค.
Order by๋ฅผ ๊ฐ์ ๋ก ์ฝ์ ํด ์ํธ์ฐ์ฐ์ด ์ผ์ด๋๋๋ก ํ๋ค. Temp ์ธ๊ทธ๋จผํธ์ ์ ์ฅํํ์๋ ์๋ฌด๋ฆฌ ๊ฐ์ ๋ธ๋ก์ ์ฌ๋ฐฉ๋ฌธํ๋๋ผ๋ ์๊ด์๋ค
๋๋์ ์ ๋ฐ์ดํธํ ๊ณง๋ฐ๋ก ํด๋น ํ ์ด๋ธ์ ๋ํด Full Scan์ ํ๋ฒ ๋ ๋ ค์ค๋ค.
์์์ฑ(Automicity), ์ผ๊ด์ฑ(Consistency), ๊ฒฉ๋ฆฌ์ฑ(Isolation), ์์์ฑ(Durability)
ํธ๋์ญ์ ์ด ์์๋ ์์ ์ ๊ธฐ์ค์ผ๋ก ์ผ๊ด์ฑ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ด๋ ๊ฒ์ ๋งํ๋ค.
๋ฉ์ธ ํธ๋์ญ์ ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ธ ํธ๋์ญ์ ๋ง ๋ฐ๋ก ์ปค๋ฐํ๋ ๊ธฐ๋ฅ
SGA์ ๊ณต์ ๋์ด ์๋ ๊ฐ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ณดํธํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋ฒผ์ด Lock
๋ฒํผ ๋ธ๋ก์ ๋ํ ์ก์ธ์ค๋ฅผ ์ง๋ ฌํ
๋์ธ์ ์ด ๊ฐ๊ฐ Lock์ ์ค์ ํ ๋ฆฌ์์ค๋ฅผ ์๋ก ์ก์ธ์ค ํ๋ ค๊ณ ๋ง์ฃผ๋ณด๊ณ ์งํํ๋ ์ํฉ
๋ฉ๋ชจ๋ฆฌ์ Caching ๋ผ ์๋ SQL์ ์ฐพ์์ ๋ฐ๋ก ์คํ
๋ฉ๋ชจ๋ฆฌ์์ SQL์ ์ฐพ๋๋ฐ ์คํจํด ์ต์ ํ ๋ฐ Row-Source์์ฑ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ ๊ฒ
๊ณต์ ์ปค์(Shared Cusor) : SGA๋ด์ Shared Pool์ ์กด์ฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์บ์์ ๊ณต์ ๋์๋ Shared SQL Area
์ธ์ ์ปค์(Session Cursor) : PGA๋ด์ Private SQL Area์ ์ ์ฅ๋ ์ปค์
์ ํ๋ฆฌ์ผ์ด์ ์ปค์(Application Cursor) : ์ธ์ ์ปค์๋ฅผ ๊ฐ๋ฆฌํค๋ ํธ๋ค
๋ฐ์ธ๋ ๋ณ์ ์ฌ์ฉ์ ํต๊ณ์ ๋ณด๋ ํ์ฉ, ์ปฌ๋ผ ํ์คํ ๊ทธ๋จ ์ ๋ณด๋ ์ฌ์ฉ๋ชปํจ
SQL๊ตฌ๋ฌธ ๋ถ์ ํ ํด์๊ฐ ๊ณ์ฐ, Library Lacth ํ๋ํ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ ๊ณผ์ ์ ์์ ๋ฒ๋ฆฐ๋ค.
์ธ์ ์ปค์ ์บ์ฑํ ์ํ์์ ๊ณต์ ์ปค์ ํ์ Pinํ๊ณ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ PGA์ ํ ๋นํ๋ ์์ ๊น์ง ์์ ๋ฒ๋ฆฐ๋ค
๋ฐ์ดํฐ ์ค๋ธ์ ํธ ๋ฒํธ(6์๋ฆฌ) + ๋ฐ์ดํฐํ์ผ ๋ฒํธ(3์๋ฆฌ) + ๋ธ๋ก๋ฒํธ(6์๋ฆฌ) + ๋ก์ฐ๋ฒํธ(3์๋ฆฌ)
x.ํํธ๋์ง์์์ฒญ์ผ์๋ varchar2 ํ์ด๋ค.
varchar2 ์ปฌ๋ผ์ ์ซ์ ๊ฐ์ ๋ํ๊ฑฐ๋ ๋นผ๋ ์ฐ์ฐ์ ๊ฐํ๋ฉด ๋ด๋ถ์ ์ผ๋ก ์ซ์ํ์ผ๋ก ํ๋ณํ์ด ์ผ์ด๋๋ค.
์ด๋ด ๊ฒฝ์ฐ y.๋์๋
์ ๊น์ง๋ ์๋์ผ๋ก ํ๋ณํ์ด ๋๋ฏ๋ก ์ธ๋ฑ์ค ์ค์บ์ด ๋ถ๊ฐ๋ฅํด์ง๋ค.
์๋์ฒ๋ผ ๋๋ ๊ฒ์ด๋ค.
to_number(y.๋์๋ ์(+)) = to_number(substr(x.ํํธ๋์ง์์์ฒญ์ผ์,1, 6)) -1
์ด๋ ๊ฒ ๋๋ฏ๋ก y.๋์๋ ์ ์ปฌ๋ผ์ ์ธ๋ฑ์ค๊ฐ ๋จนํ์ง ์๋๋ค.
์๋์ ๊ฐ์ด ํ๋ํ๋ค.
y.๋์๋ ์(+) = to_char(add_months(to_date(x.ํํธ๋์ง์์์ฒญ์ผ์, 'yyyymmdd') -1), 'yyyymm')
decode(a, b, c, d) : a์ b๊ฐ ๊ฐ์ผ๋ฉด c๋ฅผ ๋ฐํ ์๋๋ฉด d๋ฐํ
์ฌ๊ธฐ์ c์ธ์๊ฐ null๊ฐ์ด๋ฉด varchar2๋ก ์ทจ๊ธํ๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด d์ ์ธ์๊ฐ์ varchar2๋ก ํ๋ณํ ์ํจ๋ค.
max(decode(job, 'presidendt', null, sal)) max_sal2 -> ์ฌ๊ธฐ์ 4๋ฒ์งธ ์ธ์์ธ sal์ max๊ฐ์ ๊ตฌํ ๋ varchar2๋ก ํ๋ณํ ์ํ์์ max๊ฐ์ ๊ตฌํ๋ฏ๋ก 950์ด 3000๋ณด๋ค ๋ ํฐ๊ฐ์ด๋ผ๊ณ ์๋ชป ๋์ ๋ฒ๋ฆฐ๋ค.
์๋์ ๊ฐ์ด ์์ ํ๋ค.
max(decode(job, 'president', to_number(null), sal)) max_sal2 -> ์ด๋ ๊ฒ ํ๋ฉด ์ ๋๋ก sal๊ฐ์ max๊ฐ์ด ๋์จ๋ค.
๋น์ฉ = blevel + (๋ฆฌํ๋ธ๋ก์ * ์ ํจ์ธ๋ฑ์ค ์ ํ๋) + (ํด๋ฌ์คํฐ๋งํฉํฐ * ์ ํจํ ์ด๋ธ ์ ํ๋)
ํฌ๊ธฐ๊ฐ ์๊ณ NL์กฐ์ธ์ผ๋ก ๋ฐ๋ณต ๋ฃฉ์ ํ๋ ํ ์ด๋ธ
ํญ์ด ์ข๊ณ ๋ก์ฐ์๊ฐ ๋ง์ ํ ์ด๋ธ
๋์ ๋ฒ์๋ฅผ ์ฃผ๋ก ๊ฒ์ํ๋ ํ ์ด๋ธ
๋ฐ์ดํฐ ์ ๋ ฅ๊ณผ ์กฐํํจํด์ด ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ
secondary index๋ฅผ ์ต์ด ์์ฑํ๊ฑฐ๋ ์ฌ์์ฑํ ์์ ์ IOT๋ ์ฝ๋๊ฐ ์์นํ๋ ๋ฐ์ดํฐ ๋ธ๋ก ์ฃผ์
Logical Rowid = PK + Physical guess
์ค๋ผํด์ ํ ๋ธ๋ก์ ์ ์ฅํ ์ ์๋ ์ต๋ ๋ ์ฝ๋์๋ฅผ ์ ํํ๋ค.
๋นํธ๋งต ์ธ๋ฑ์ค 9500๋ฒ์งธ ๋นํธ๊ฐ 1์ธ ๊ฐ์ ๋ ์ฝ๋๋?
์ต๋๋ ์ฝ๋ ๊ฐ์๋ : 730
9500/730 = 13 -> 14๋ฒ์งธ ๋ธ๋ก
9500%730 = 10 -> 10๋ฒ์งธ ๋ ์ฝ๋
ํ๋ฒ์ Disk I/O๋ฅผ ํตํด์ ๊ณง์ด์ด ์ฝ์ ๊ฐ๋ฅ์ฑ์ด ํฐ ๋ธ๋ก๋ค์ ์บ์์ ๋ฏธ๋ฆฌ ์ ์ฌ ํ๋ ๊ธฐ๋ฅ
Inner์ชฝ Non-Unique ์ธ๋ฑ์ค๋ฅผ Range Scanํ ๋
Inner์ชฝ Unique ์ธ๋ฑ์ค๋ฅผ Non-Unique ์กฐ๊ฑด์ผ๋ก Range Scan ํ ๋
Inner์ชฝ Unique ์ธ๋ฑ์ค๋ฅผ Unique์กฐ๊ฑด์ผ๋ก ์คํํ ๋ ๋ํ๋ ์์๋๋ฐ ์ด๋๋ Range Scan์ผ๋ก ์ก์ธ์ค
ํ ์ด๋ธ ๋ธ๋ก์ ๋ํ Buffer Pinning
Inner์ชฝ ์ธ๋ฑ์ค ๋ฃจํธ ๋ธ๋ก์๋ํ Buffer Pinning
ํ๋์ Outer๋ ์ฝ๋์ ๋ํ Inner์ชฝ๊ณผ์ ์กฐ์ธ์ ๋ง์น๊ณ Outer์ชฝ์ผ๋ก ๋์์ค๋๋ผ๋ ํ ์ด๋ธ ๋ธ๋ก์ ๋ํ Buffer Pinning
User Rowid๋ก ํ ์ด๋ธ ์ก์ธ์ค์ Buffer Pinning
Inner์ชฝ ๋ฃจํธ์๋ ์ธ๋ฑ์ค ๋ธ๋ก๋ค๋ Buffer Pinng
๋ฐ์ดํฐ์ค๋ธ์ ํธ๋ฒํธ(6)+๋ฐ์ดํฐํ์ผ๋ฒํธ(3)+๋ธ๋ก๋ฒํธ(6)+๋ก์ฐ๋ฒํธ(3)
์กฐ๊ฑด์ ์ ์ฌ์ฉ, '='์กฐ๊ฑด์ผ๋ก ์กฐํ
SELECT /*+ LEADING(DEPT@QB1) */ *
FROM EMP
WHERE DEPTNO IN
(
SELECT /*+ UNNEST QB_NAME(QB1) */ DEPTNO
FROM DEPT
);
SELECT /*+ LEADING(EMP) */ *
FROM EMP
WHERE DEPTNO IN
(
SELECT /*+ UNNEST NL_SJ */ DEPTNO
FROM DEPT
);
SELECT *
FROM DEPT D
WHERE NOT EXSITS
( SELECT /*+ UNNEST NL_AJ */ 'X'
FROM EMP
WHERE DEPTNO = D.DEPTNO
);
SELECT /*+ LEADING(E1) USE_NL(E2) */ SUM(E1.SAL), SUM(E2.SAL)
FROM EMP1 E1, EMP2 E2
WHERE E1.NO = E2.NO
AND EXISTS
(
SELECT /*+ NO_UNNSET PUSH_SUBQ */ 'X' FROM DEPT
WHERE DEPTNO = E1.DEPTNO
AND LOC = 'NEW YORK'
);
์งํฉ์ฐ์ฐ์, CONNECT BY ์ , ROWNUM ์ฌ์ฉ, GROUP BY ์์ด ์ง๊ณํจ์ ์ฌ์ฉ, ๋ถ์ํจ์
ALTER SESSION ENABLE PARALLEL DML;
EXPLAIN PLAN FOR
UPDATE /*+ PRRALLEL(T 4)*/ T SET NO2 = LPAD(NO, 5, '0');
ALTER SESSION ENABLE PARALLEL DML;
INSERT /*+ APPEND PARALLEL(T1 4) */INTO T1
SELECT /*+ FULL(T2) PARALLEL(T2 4) */ * FROM T2;
๋ธ๋ก๊ธฐ๋ฐ Granule : PX BLOCK ITERATOR
ํํฐ์ ๊ธฐ๋ฐ Granule : PX PARTITION RANGE ALL(ํํฐ์ ์ ์ฒด), PX PARTITION RANGE ITERATOR(๋ถ๋ถ ํํฐ์ )
FULL PARTITION WISE ์กฐ์ธ : ๋๊ฐ์ ํ ์ด๋ธ์ด ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํํฐ์ ๋ ๋์ด ์๋ ๊ฒฝ์ฐ
PARTIAL PARTITION WISE ์กฐ์ธ : ๋์ค ํ๋๋ง ํํฐ์ ๋์ด ์๋ ๊ฒฝ์ฐ
๋์ ํํฐ์ ๋ : ์์ชฝ ํ ์ด๋ธ์ ๋์ ์ผ๋ก ํํฐ์ ๋ํ๊ณ ์ FULL PARTITION WISE ์กฐ์ธ, ํ์ชฝํ ์ด๋ธ์ BROADCAST ํ๊ณ ๋์ ์กฐ์ธ
BROADECAST ๋ฐฉ์
์นด๋๋๋ฆฌํฐ = ์ ํ๋ * ์ ์ฒด๋ ์ฝ๋ ์
sql๊ตฌ๋ฌธ๋ถ์,ํด์๊ฐ๊ณ์ฐ,๋ผ์ด๋ธ๋ฌ๋ฆฌ์บ์ ๋์น ํ๋,๋ผ์ด๋ธ๋ฌ๋ฆฌ์ปค์ ํ์ ๋ค์ ์๋ต
์ธ์ ์ปค์์บ์ฑ์๋ค๊ฐ ๊ณต์ ์ปค์ ํ์ pinํ๊ณ ์คํ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ pgaํ ๋นํ๋ ๊ณผ์ ์ ์๋ต