목록Database/Oracle (7)
시다바리
SQL은 CASE문장의 네가지 유형을 지원합니다. 1. 간단한 CASE 표현식 2. 검색 CASE표현식 3. NULLIF 4. COALESCE 이중에서 간단한 CASE표현식은 Oracle 8.1.7 에서 제공되었으며, 나머지 기능들은 Oracle 9i에 포함됩니다. 또한 CASE표현식은 PL/SQL에서도 지원(9i 이후부터)되며, 표현식과 문장으로 분류됩니다. 간단한 CASE 표현식 ------------------------------------------------------------------ 이것은 Oracle 9i 이전의 서버에서 제공하던 DECODE 문장과 유사하며 주어진 표현식에서 검색을 하거나 값을 치환하는데 사용될 수 있습니다. 또 각각의 검색 값에 대해서 반환되는 값을 명시할 수 있으..
Bitmap Join Indexes (BJI) is new functionality provided by Oracle9i. A Bitmap Join Index prestores the results of a join and thus can avoid a join operation altogether at runtime. Bitmap Join Indexes are especially useful in datawarehouse star schemas. When a column in a dimension table is used to restrict the data selected from a fact table (with Foreign Keys) and n dimension tables (with Prima..
스타조인 중 카티젼 곱이 너무 크거나, 애써 준비한 상수집합이 팩트 집합의 처리범위를 제대로 줄여 주지 못한다면 너무 억울하다. 만약 카티젼 곱을 만들지 않아도, 수많은 결합인덱스를 가지고 있지 않아도 팩트 테이블의 처리범위를 쉽게 줄여 줄 수 있는 방법이 있다고 한다면 얼마나 좋겠는가 ? 스타변형(Star Transformation) 조인에 대해서 상세하게 알아보기로 하자. 스타변형 조인은 비트맵 인덱스의 특성을 살린 것이다. 따라서 비트맵 인덱스이 장*단점을 그대로 승계하고 있다. 스타조인은 카티젼 곱을 만들었지만 스타변형조인은 비트맵 인덱스를 활용한다. 비트맵 인덱스는 그 구조적인 특성으로 인해 각각의 독립된 인덱스르 머지하더라도 그다지 부담이 되지 않는다. SELECT * FROM sales WH..
Hint란? select문을 실행시키면 DB의 옵티마이져가 조건절 또는 join절 등을 고려하여 액세스 경로를 결정한다. 이때 옵티마이저에게 모든 것을 맡기지 않고 사용자가 원하는 보다 좋은 액세스 경로를 선택할 수 있도록 하는 것이 Hint이다. 힌트의 사용 방법 힌트를 사용하는 방법은 "/*+ */"와 "--+"의 두 가지 방법이 있다. /*+ */ 여러 라인에 걸쳐 기술할 때 사용. --+ 오직 한 라인에만 기술할 수 있고 칼럼은 반드시 다음 라인에 기술해야 한다. 예제 : kkaok이라는 테이블이 있고 kkaok_indx라는 인덱스를 힌트에 사용한다고 가정한다. SELECT /*+ INDEX(kkaok kkaok_indx) */ name,content FROM kkaok WHERE rownum
설명1 : Query Optimizer가 SQL 해석할 때 Where절에 여러 조건이 있고, 해당 조건 컬럼들에 Index가 각각 생성되어 있을 경우 Btree Index를 Bitmap으로 conversion하여 PLAN을 수립하여 실행함. 이럴경우 TYPE이나 Code성 컬럼의 경우 Btree Index range scan으로 해석되는 경우보다 성능이 나을수 있으나 일반적으로 성능이 저하되는 경우가 더 많음. (필수적용사항) 설명2 : BTree Index에 대해 Bitmap Conversion을 수행하는 실행 계획을 고려할 지의 여부를 지정한다. Bitmap Conversion이 발생하면 Oracle은 다음과 같은 방식으로 BTree Index를 Bitmap으로 변환해서 처리한다. BTree Inde..
내가 알고 있는 SQL SELECT a.sid, a.serial#, a.username, a.process, substr(a.MACHINE,1,20), to_char(a.LOGON_TIME, 'yyyymmddhh24miss' ), b.object_name, decode(c.lmode, 2, 'RS', 3, 'RX', 4, 'S', 5, 'SRX', 8, 'X', 'NO') TABLE_LOCK, decode(a.command, 2, 'INSERT',3, 'SELECT',6, 'UPDATE', 7, 'DELETE', 12, 'DROP',6, 'LOCK', 'unknown') SQL, decode(a.lockwait, NULL, 'No Wait', 'Wait') STATUS FROM V$SESSION a, D..
▒ 첫번째 방법 SQL*Plus에서 SET DEFINE OFF나 SET SCAN OFF를 실행하여 Substitution Variable(&)을 Turn Off시킨다. SQL> SET DEFINE OFF SQL> INSERT INTO test_str VALUES('Q&A'); 1 개의 행이 만들어졌습니다. SQL>SELECT * FROM test_str; VAL ------ Q&A ▒ 두번째 방법 SET DEFINE ON 상태로 유지 시키면서 Substitution Variable을 다른 Non-Alphanumeric 문자나 Non-White Space 문자(*, % 등등)로 대체시킨다. SQL> SET DEFINE % SQL> INSERT INTO test_str VALUES('Q&A'); 1 개의 행..