실무에서 사용하는 데이터에서 신규 시스템 구축 후 또는 제대로 설계되지 않거나 전문 DBA가 아닌 고객이 관리하는 엑셀과 같은 형식으로 관리하는 경우에 중복으로 입력된 데이터이 무분별하게 존재하여 사용성을 저해할 수 있다. 이러한 데이터베이스의 무결성을 지키기 위해 중복되는 데이터를 제거하여 UNIQUE하며 NULL값이 될수 없는 새로운 KEY를 설정해야 한다. * SAMPLE TABLE TN_RDNMADR ( 도로명주소 ) : 전국 도로명주소를 데이터베이스화 하여 샘플 테이블 구축 * 사용 함수 - 오라클 그룹함수 : GROUP BY , HAVING , PARTITION BY (1) 중복이 존재하는 컬럼을 GROUP BY로 그룹핑 한 후 HAVING 에서 조건을 COUNT가 1 이상인것으로 SELECT..
전체 글
* DB LINK? - 현재 데이터베이스 세션 내에서 물리적으로 다른 곳에 위치한 데이터베이스 연결을 지원하는 확장성 모듈. - EXTENSION MODULE - extension 설치 후, 사용자 설정에 맞춰 사용하고 삭제하지 않는 이상 재설치는 불가. - 스키마 지정이 없으면 default로 public에 설치가 되므로 스키마별로 사용이 필요한 경우, ALTER로 변경하거나 삭제 후 재설치하여 사용. * DB LINK EXTENSION 설치 CREATE EXTENSION [ IF NOT EXISTS ] extension_name [WITH] [SCHEMA schema_name] [VERSION version] [FROM old_version] * DB LINK 관리 CREATE EXTENSION IF..
- 실무에서 데이터베이스 관련 일을 하다보면 '인덱스를 탄다' 인덱스를 안탄다' 와 같은 말들을 들을 수 있다. 오라클 서버가 업그레이드 되면서 Optimizer의 성능도 함께 향상되어 쿼리 실행시 최적의 방법으로 실행해준다. 하지만 Optimizer가 항상 최적의 실행 경로를 만들어내는 것은 불가능하기 때문에 직접 실행경로를 작성해 주어야 하는 경우가 생긴다. 따라서 DBA는 느린 쿼리나 성능 튜닝을 위해 Optimizer가 적절한 인덱스를 타고 있는지 확인하는 절차가 필요하다. 한 쿼리에서 어떤 인덱스의 선택도가 높은지 파악하고 Optimizer에 의존한 실행계획보다 효율적인 실행 계획을 만들어 내어야 한다. - 힌트, 인덱스, 조인 등의 개념을 명확히 알지 않은 상태에서 무분별한 힌트의 사용은 데이..
* 오라클 인덱스 기본 설명 https://kwomy.tistory.com/72 [ORACLE] index 기본 구조와 사용 * 인덱스란? 인덱스는 테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조이다. 일종의 색 kwomy.tistory.com - 인덱스의 사용은 현재 데이터베이스를 사용하는 거의 모든 환경에서 필수불가결한 존재일 수 있다. 많은 장점을 가지고 있으며 좋은 도구인 만큼, 유지보수도 중요하다. * 인덱스 구조 - INDEX는 ROOT, BRANCH, LEAF로 구성된 계층 구조를 가지며 Optimizer가 데이터베이스의 환경과 실행계획을 보고 스스로 판단하여 쿼리를 수행한다. 오라클 서버가 쿼리..
* 인덱스란? 인덱스는 테이블이나 클러스트에서 쓰여지는 선택적인 객체로서, 오라클 데이터베이스 테이블내의 원하는 레코드를 빠르게 찾아갈 수 있도록 만들어진 데이터 구조이다. 일종의 색인 기술로써 테이블에 index를 생성하게 되면 index table을 생성해 관리한다. index 생성시 아무 옵션 없이 default로 생성하면 B-Tree index가 생성된다. - 자동 인덱스 : 프라이머리 키 또는 UINQUE 제한 규칙에 의해 자동적으로 생성되는 인덱스. 가장 기본적인 B-Tree 인덱스로 인덱스 키(인덱스로 만들 테이블의 컬럼 값) + 키에 해당하는 컬럼값을 가진 테이블 로우가 저장된 주소로 구성 - 수동 인덱스 : CREATE INDEX 명령을 직접 실행하여 만드는 인덱스 * 인덱스는 언제 사용..
1. Default 값이 있는 필드를 추가하면 안된다 PostgreSQL 10이하 버전에서, Default 값이 있는 필드를 추가하면, 테이블 락이 걸릴 수 있다. 그리고 엄청 느리다. 그래서 이런 쿼리를 날리면 안된다. ALTER TABLE items ADD COLUMN updated_at timestamptz DEFAULT now(); 기본값이 없는 필드를 추가한 후, UPDATE를 날리거나 ALTER TABLE items ADD COLUMN updated_at timestamptz; UPDATE items SET updated_at = now(); 이렇게 쪼개서, UPDATE를 해주는게 좋다. ( 한번에 전체 테이블을 Update를 하면, 오래걸리니까. ) do { numRowsUpdated = e..