header-img
Info :
728x90

Database Optimizer λž€?

SQL을 κ°€μž₯ λΉ λ₯΄κ³  효율적으둜 μˆ˜ν–‰ν•  졜적의 처리 경둜λ₯Ό μƒμ„±ν•΄μ£ΌλŠ” DBMS λ‚΄λΆ€μ˜ 핡심 엔진

 

μ˜΅ν‹°λ§ˆμ΄μ €μ˜ SQL μ΅œμ ν™” κ³Όμ •

1. μ‚¬μš©μžκ°€ λ˜μ§„ 쿼리 μˆ˜ν–‰μ„ μœ„ν•˜μ—¬, 후보ꡰ이 될 λ§Œν•œ μ‹€ν–‰κ³„νšμ„ μ°ΎλŠ”λ‹€.

2. 데이터 λ”•μ…”λ„ˆλ¦¬(Data Dictionary)에 미리 μˆ˜μ§‘ν•΄ 놓은 였브젝트 톡계 및 μ‹œμŠ€ν…œ 톡계 정보λ₯Ό μ΄μš©ν•΄ 각 μ‹€ν–‰ κ³„νšμ˜ μ˜ˆμƒ λΉ„μš©μ„ μ‚°μ •ν•œλ‹€.

3. 각 μ‹€ν–‰κ³„νšμ„ λΉ„κ΅ν•˜μ—¬ μ΅œμ € λΉ„μš©μ„ κ°–λŠ” ν•˜λ‚˜λ₯Ό μ„ νƒν•œλ‹€.

 

μ˜΅ν‹°λ§ˆμ΄μ €μ˜ ν•„μš”μ„±

- μž‘μ„±ν•œ SQL문을 μ–΄λ–€ μ‹μœΌλ‘œ μ‹€ν–‰ν•˜λŠλƒμ— 따라 μ„±λŠ₯이 달라진닀.

- μ˜΅ν‹°λ§ˆμ΄μ €κ°€ λΉ„νš¨μœ¨μ μœΌλ‘œ μ‹€ν–‰ κ³„νšμ„ μˆ˜λ¦½ν•˜λ©΄, SQL κ°œλ°œμžλŠ” SQL을 κ°œμ„ ν•΄μ•Ό ν•œλ‹€.

- μ˜΅ν‹°λ§ˆμ΄μ €μ—κ²Œ μ‹€ν–‰ κ³„νšμ„ λ³€κ²½ν•˜λ„λ‘ μš”μ²­ν•  수 μžˆλŠ”λ° μ΄λ•Œ 힌트(HINT)/MSSQL, μ˜΅μ…˜(OPTION)을 μ‚¬μš©ν•œλ‹€.

 

μ˜΅ν‹°λ§ˆμ΄μ €μ˜ μ’…λ₯˜

ν•­λͺ© κ·œμΉ™ 기반 μ˜΅ν‹°λ§ˆμ΄μ € λΉ„μš© 기반 μ˜΅ν‹°λ§ˆμ΄μ €
κ°œλ… 사전에 μ •μ˜λœ κ·œμΉ™ 기반 μ΅œμ†Œ λΉ„μš© κ³„μ‚°ν•˜μ—¬ μ‹€ν–‰κ³„νš 수립
κΈ°μ€€ μ‹€ν–‰ μš°μ„  μˆœμœ„(Ranking) μ•‘μ„ΈμŠ€ λΉ„μš©(Cost)
인덱슀 인덱슀 쑴재 μ‹œ κ°€μž₯ λ¨Όμ € μ‚¬μš© Cost에 μ˜ν•œ κ²°μ •
μ„±λŠ₯ μ‚¬μš©μž SQL μž‘μ„± μˆ™λ ¨λ„μ— 따라 달라짐 μ˜΅ν‹°λ§ˆμ΄μ € 예츑 μ„±λŠ₯으둜 진행
μž₯점 μ‹€ν–‰ 루트 μ˜ˆμƒ κ°€λŠ₯ 톡계 정보λ₯Ό ν†΅ν•œ ν˜„μ‹€ μš”μ†Œ 적용
단점 μ˜ˆμΈ‘λ˜λŠ” 톡계 정보 λ¬΄μ‹œ 예츑 μ œμ–΄κ°€ 어렀움

* MSSQL/ORACLE 은 κΈ°λ³Έ λΉ„μš© 기반 μ˜΅ν‹°λ§ˆμ΄μ €μž„

 

μ˜΅ν‹°λ§ˆμ΄μ € 엔진

μ˜΅ν‹°λ§ˆμ΄μ € μ„€λͺ…
Query Transformer SQL문을 효율적으둜 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ μ˜΅ν‹°λ§ˆμ΄μ €κ°€ λ³€ν™˜
Estimator 톡계 정보λ₯Ό μ‚¬μš©ν•˜μ—¬ SQL μ‹€ν–‰ λΉ„μš©μ„ 계산함. 총 λΉ„μš©μ€ 졜적 μ‹€ν–‰ κ³„νšμ„ μˆ˜λ¦½ν•˜κΈ° μœ„ν•¨μ΄λ‹€.
Plan Generator SQL을 μ‹€ν–‰ν•  μ‹€ν–‰ κ³„νšμ„ 수립.

 

μ˜΅ν‹°λ§ˆμ΄μ € 엔진 μ‹€ν–‰ μˆœμœ„

* κ·œμΉ™ 기반 μ˜΅ν‹°λ§ˆμ΄μ €(RBO) κ΅¬ν˜„ μ‹œ μ°Έκ³ 

μš°μ„  μˆœμœ„ Decs.
1 ROWIDλ₯Ό μ‚¬μš©ν•œ 단일 행인 경우
2 ν΄λŸ¬μŠ€ν„° 쑰인에 μ˜ν•œ 단일 행인 경우
3 μœ μΌν•˜κ±°λ‚˜ κΈ°λ³Έν‚€(Primary Key)λ₯Ό 가진 ν•΄μ‹œ ν΄λŸ¬μŠ€ν„° 킀에 μ˜ν•œ 단일 행인 경우
4 μœ μΌν•˜κ±°λ‚˜ κΈ°λ³Έν‚€(Primay Key)에 μ˜ν•œ 단일 행인 경우 
5 ν΄λŸ¬μŠ€ν„° 쑰인인 경우
6 ν•΄μ‹œ ν΄λŸ¬μŠ€ν„° 쑰인인 경우
7 인덱슀 ν΄λŸ¬μŠ€ν„° 쑰인인 경우
8 볡합 칼럼 인덱슀인 경우
9 단일 칼럼 인덱슀인 경우
10 μΈλ±μŠ€κ°€ κ΅¬μ„±λœ μ»¬λŸΌμ—μ„œ μ œν•œλœ λ²”μœ„λ₯Ό κ²€μƒ‰ν•˜λŠ” 경우
11 μΈλ±μŠ€κ°€ κ΅¬μ„±λœ μ»¬λŸΌμ—μ„œ λ¬΄μ œν•œ λ²”μœ„λ₯Ό κ²€μƒ‰ν•˜λŠ” 경우
12 μ •λ ¬-병합(Sort-Merge) 쑰인인 경우
13 μΈλ±μŠ€κ°€ κ΅¬μ„±λœ μΉΌλŸΌμ—μ„œ MAX/MIN을 κ΅¬ν•˜λŠ” 경우
14 μΈλ±μŠ€κ°€ κ΅¬μ„±λœ μΉΌλŸΌμ—μ„œ Order Byλ₯Ό μ‹€ν–‰ν•˜λŠ” 경우 
15 전체 ν…Œμ΄λΈ”μ„ μŠ€μΊ”(Full Table Scan)ν•˜λŠ” 경우

 

728x90
더보기
BACKEND/곡뢀