성장 일기/쌍용교육센터 / / 2023. 2. 1. 12:05

0201/인덱스, JDBC

쌍용교육센터에서 공부한 내용을 정리하며 기록하는 글이고 주관적인 생각이 들어갈 수 있습니다.
잘못된 내용이나 피드백 및 생각 공유는 언제든 환영입니다.
댓글로 남겨주시면 확인 후 수정하겠습니다.
내용에 대한 소스 코드는 https://github.com/2jaehoon/sangyoungjdbc에 올려두었습니다.

 

index

  - 레코드의 양이 많을 때 빠른 검색을 하기 위해 사용되는 객체

  - 자동 인덱스와 수동 인덱스를 제공

      자동 인덱스 : 테이블을 생성했을 때 PK, UX에 의해 자동으로 생성되는 인덱스

                            unique 인덱스가 자동 생성

 

      수동 인덱스 : 개발자가 필요에 의해 생성하는 인덱스

                            ( unique, non unique, bitmap, composite )

  - 모든 계정은 index를 생성할 수 있다.

  - user_indexes DD에서 확인 가능

  - 모든 레코드는 rowid를 가진다.

      rowid : recode를 식별하기 위한 주소

  - 인덱스는 테이블에서 도출된 객체이지만 테이블과는 별도로 동작을 한다.

      시간이 지나면 테이블과 인덱스 간의 데이터의 차이가 발생한다.

      일정 주기로 index를 rebuild해야 한다.

  - b-tree index를 생성 ( 데이터 양이 많아질 수록 full scan보다 빠른 index scan )

 

* 인덱스 생성

-- 인덱스로 선정하는 컬럼은 
-- where 절에서 자주 사용되는 컬럼, 자주 변경되지 않는 컬럼으로 하는 게 좋다.
create [ 인덱스 종류 ] index 인덱스명 on 테이블명( 컬럼명, ..., ... );

 

인덱스가 적용되지 않은 컬럼을 사용하여 검색하면 CPU Cost와 IO COST 증가

 

인덱스가 적용된 컬럼을 사용하여 검색하면 CPU Cost와 IO COST 감소

 

unique index

  - 컬럼의 값이 유일할 때 사용하는 인덱스

  - 자동 인덱스

  - 테이블을 생성할 때 PK나 Unique 제약을 설정하면 자동으로 생성

  - user_ind_columns DD에서 인덱스가 설정된 컬럼을 검색 가능

 

* 인덱스 생성

create unique index 인덱스명 on 테이블명( 컬럼명 );

 * 인덱스 삭제

drop index 인덱스명;

 

non unique index

  - 컬럼의 값이 중복될 때 사용하는 인덱스( 일반 컬럼에 주로 적용 )

  - 개발자가 수동으로 생성하는 인덱스

 

* 인덱스 생성

create index 인덱스명 on 테이블명( 컬럼명 );

 

bitmap

  - 컬럼의 값이 중복되나 독특한 형태의 값일 때 사용하는 인덱스( 코드값- ICD_0001 )

  - 12c부터 생성이 안됨

 

* 인덱스 생성

create bitmap index 인덱스명 on 테이블명( 컬럼명 );

 

composite index

  - 여러 개의 컬럼으로 인덱스를 구성해야 할 때

 

* 인덱스 생성

create index  인덱스명 on 테이블명 ( 컬럼명, ..., ... );

  

인덱스 재구축( 갱신 )

  - 테이블의 변경사항을 적용하여 인덱스를 재구축

alter index 인덱스명 rebuild;

 

CRUD

  - Create( create, insert, grant ), Read( select )

  - Update( update, alter, commit, rollback ), Delete( delete, truncate, drop, revoke )

 

JDBC( Java DataBase Connectivity )

  - Java에서 DBMS와 연동하기위한 저수준 API

  - java.sql 패키지에서 관련 인터페이스, 클래스를 제공
  - Driver loading 방식( Driver만 제공된다면 모든 DBMS와 연동할 수 있다. )

 

Driver

  - DB Server에 접속하기 위한 DB Client를 .class파일로 만든 것
  - sun사에서 interface로 작업 목록을 제공하고 DB Vendor사에서
  - interface에 해당하는 작업들을 자체개발하여 제공( 4가지 type )
  - Driver는 .jar파일로 배포된다.

 

type 1( JDBC-ODBC Bridge Driver )

  - Windows 에서만 사용할 수 있는 방식

  - DBMS의 연결을 OS에서 설정하고, Java에서 사용하는 방식
  - java에서 제공하는 유일한 드라이버지만 속도가 느리다. 
  - Windows로 서비스 되는 일이 없기 때문에 잘 사용하지 않는다.

 

type 2( native driver )

  - Driver를 제작한 언어가 Java와는 다른언어로 개발된 Driver 방식
  - Driver를 사용하기 위해 별도의 프로그램을 설치해야 한다.
  - Middleware에서  주로 사용
  

type 3( network protocol driver )

  - applet에서 DBMS와 연동하기 위한 driver.

 

type 4 ( native protocol driver )

  - JDBC에서 가장많이 사용하는 Driver( 빠른 성능과 안정성을 제공 )

  - Driver를 제작한 언어가 Java언어이므로 개발된 자바 프로그램에서

    데이터를 주고 문제가 발생하지 않는 Driver 방식( 안정성 )

 

JDBC 사용객체

  - java.lang.Class : 배포된 .jar( driver )를 객체화하여 JVM에 로딩( instance )하는 일

  - java.sql.DriverManager : 로딩된 드라이버를 사용하여 DB연결을 얻는 일

  - java.sql.Connection : DBMS와 연결을 유지, transaction 처리, 쿼리문 생성객체 얻는 일

  - java.sql.Statement : 쿼리문을 쿼리가 실행될 때마다 생성하여 처리하는 객체

  - java.sql.PreparedStatement : 쿼리문을 미리 생성하고 값만 나중에 넣어 처리하는 객체

  - java.sql.CallableStatement : Procedure를 사용하는 객체

  - java.sql.ResultSet :  조회결과를 사용하기 위한 객체

  - java.sql.ResultSetMetaData : DD를 사용하지 않고 테이블의 컬럼 정보를 얻기 위한 객체

  - java.sql.Types : Procedure에 out parameter값을 임시로 저장하기 위한 데이터 형을 제공하는 객체

  - java.sql.Clob : clob 데이터를 사용하기 위한 객체

 

DBMS 작업 순서

  1. 드라이버 로딩( Class )

  2. Connection 얻기( DriverManager, Connection )

  3. 쿼리문 생성객체 얻기( Statement, PreparedStatement, CallableStatement )

  4. 쿼리문 수행 후 결과 얻기( ResultSet, Clob, Types )

  5. 연결 끊기( 메모리 누수 발생 )

 

DB연결작업

  1. 드라이버 로딩

Class.forName( “oracle.jdbc.OracleDriver” );

  2. 로딩된 드라이버를 사용하여 Connection 얻기

String url=“jdbc:oracle:thin:@DB서버ip:1521:SID”;//위치
String id=“scott”;//계정
String pass=“tiger”;//비번

Connecton con=DriverManager.getConnection( url, id, pass);

 

쿼리 실행

  1. 드라이버 로딩( DB Client사용 )

// Class.forName( “로딩할 드라이버 경로” );
Class.forName(“oracle.jdbc.OracleDriver”);// DB 클라이언트 : DBMS의 테이블을  SQL문을 써서 사용하는 일

  2. 로딩된 드라이버를 사용하여 DBMS와 연결하여 Connection을 얻는다.

String url=“jdbc:oracle:thin:@localhost:1521:orcl”;
String id=“scott”;
String pass=“tiger”;

Connection con= DriverManager.getConnection( url, id, pass );

  3. 커넥션에서 쿼리문 생성객체 얻기 ( Statement, PreparedStatement )

Statement stmt = con.createStatement();

  4. 쿼리문 생성객체를 통해 쿼리문 실행

boolean flag = stmt.execute( SQL문 );
// DBMS를 변경하는 쿼리
// create, drop, alter, truncate은 boolean형

int cnt = stmt.executeUpdate( SQL문 );
// DBMS를 변경하는 쿼리
// insert, update, date은 int형

ResultSet rs = stmt.executeQuery( SQL문 );
// DBMS를 변경하지 않는 쿼리
// select는 ResultSet형

    

eclipse plugin

  - 이클립스가 제공하는 기능 이외에 추가하여 사용할 수 있는 기능

  - 설치된 이클립스의 Marketplace,  install new software, web site에서 다운받을 수 있다.

 

 

'성장 일기 > 쌍용교육센터' 카테고리의 다른 글

0203/PreparedStatement  (0) 2023.02.08
0202/Statement  (0) 2023.02.02
0131/계정 권한, 백업 및 복원, view  (0) 2023.01.31
0130/시퀀스, 조인, 정규화  (0) 2023.01.30
0127/테이블 제약 조건  (0) 2023.01.27
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유