database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1362 게시물 읽기
No. 1362
질문.. primarkkey 와 foreignkey
작성자
초보
작성일
2005-11-09 17:46
조회수
6,044

sp_primarykey 나 sp_foreignkey 을 이용해 주키와 외래키를 잡으면

 

index를 잡는거하고 비슷한 기능을 할수도 잇는 건가요?

 

아님. 쿼리속도에 영향을 주려면 index는 따로 잡아야 하나요?

 

이전부터 키에 대한 이론적인 개념은 대강이나마 알겠는데

 

실제 사이베이스에서 어케 인덱스와 키가 쓰이고 어떤 역할을 하는지 잘 모르겠네요...

 

도와주세요

이 글에 대한 댓글이 총 3건 있습니다.

그냥두셔도 무방합니다.

동일한 효과가 납니다.

 

 

헬로미님이 2005-11-09 20:54에 작성한 댓글입니다. Edit

1. sp_primarykey나, sp_foreignkey는 테이블에서 key를 primary key 혹은 foreignkey로 어떤 컬럼을 사용했다는 정보를 추가할 때 사용하는 프로시져일뿐입니다. 이 프로시저만으론 실제 테이블에 데이타를 insert하거나 delete 할 때 어떤 제약사항도 발생하지 않습니다. 달리 얘기하면, primary key나 foreignkey를 만들어 consistency를 유지시키려면, 제약사항(constraint)를 만들어 줘야 한다는 겁니다.

 

SYBASE ASE에선 테이블에 제약사항을 만들려면

테이블 생성(create table)시 constraint를 만들어 주거나 alter table..add...로 constraint를 만들어 줄수 있습니다.

 

예를 들어 생성시에 primary key constraint를 만든다면,

1> create table pk_tbl (a_col int, b_col char(10), primary key (a_col))

2> go

하시면, primary key로 a_col 에대한 constrinat가 생성되고, 동시에 자동으로 unique clustered index가 생성되고, 인덱스 컬럼으로 a_col 이 사용됩니다.  물론 primary key nonclustered (a_col) 하면 unique nonclustered index로 만들수도 있습니다.

 

constraint와 index 확인을 위해

1> sp_helpconstraint pk_tbl

2> go

......

1>sp_help pk_tbl

2> go

하시면 첫 명령에선 constraint 를 확인할 수 있고, 두번째 명령에선 a_col에 unique clustered index가 생성된 것을 확인 할 수 있습니다. 또한 sp_help 결과내에 No defined keys for this object라는 메세지를 볼 수 있는데.. 이메세지는 primary key로 정의된 컬럼이 없다는 의미 보다는 primary key에 대한 정의된 정보가 없다는 거죠.

 

이 정보를 바꿔주기 위해

1>sp_primarykey pk_tbl, a_col

2>go

 하시고 다시 sp_help pk_tbl하시면 key 정보가 바뀐걸 보실 수 있을 겁니다.

 

 

2. constraint에는 여러 종류가 많습니다. 그중에서 primary key는 좀 특별하죠. primary key constraint가 만들어질 뿐 아니라 , unique index가 만들어 지니까요. 

그러나 반대로 unique index가 만든다고 primary key constraint는 안 만들어 지죠. 하지만, 테이블에 insert, delete를 해보면 primary key constraint가 있는 것과 동일한 반응을 보입니다. 더군다나 primary key constraint가 없는데도 이 컬럼을 foreignkey가 참조할 수도 있습니다.

 

결론은 unique index가 primary key 역활을 해준다는 겁니다. 비록 constraint가 없더라도..

 

3. 아시겠지만, index는 3가지 분류로 나뉩니다

a) composite 이냐 아니냐

b) unique 냐 아니냐

c) clustered 냐 아니냐

 인덱스 분류에 의한 인덱스 총 종류는 8개가 나오겠군요.

암튼, composite 는 index 컬럼이 여러개인 걸 뜻하고,

clustered는 데이타가 들어 올때 마다 sorting을 할때,

unique는 중복된 데이타를 입력받지 않으로고 할 때

인덱스는 필요에 의해서 만들어지고, 데이터 조회시 속도 개선용으로 만들어 집니다. 그렇다고 무턱데고 인덱스를 많이 만들면 데이터 입력시 속도가 떨어지게 되는 현상이 발생하겠죠? 그많큼 써야 하는 페이지가 늘어나니까요.(인덱스도 페이지에 기록해야 하니...)

 

4. 마지막으로 primary key constraint만들면 unique index가 만들어지니 속도 개선이 될 수도 있겠죠. consistency를 고려하는게 아닌, 조회 속도 개선을 위한 거라면 인덱스만 만들어도 된다는 겁니다. 다만

쿼리문에 적합한 인덱스를 만들어 줘야 하고, 인덱스가 lock scheme이랑 연관되어 io를 발생시키는 것도 인덱스 생성시 고려해야 할 사항입니다.

 

 

글 쓰면서 이것저것 두서 없이 써서 ... 쩝... 암튼 직접 해보시고. 확인하시는게 젤 좋을 거 같네욤

 

 

왕~궁그미님이 2005-11-09 21:32에 작성한 댓글입니다.
이 댓글은 2005-11-09 22:00에 마지막으로 수정되었습니다. Edit

아.. 좋은 정보 정말 감사합니다.

초보님이 2005-11-10 09:14에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1365세로로된 데이터를 가로로 출력을 하고 싶은데요.. [2]
이덕형
2005-11-15
5408
1364Query 수행 속도 [2]
배우자
2005-11-15
3960
1363Sybase SQL Anywhere Studio 싸게 드립니다. [1]
Anywhere
2005-11-14
3566
1362질문.. primarkkey 와 foreignkey [3]
초보
2005-11-09
6044
1361Jeus + ASE12.5 [4]
정재봉
2005-11-08
4946
1360[기본명령어] 이것좀 알려주세요 [1]
김대중
2005-11-07
4827
1359character set 설정하기 - 알려주세요 ㅡㅡ; [4]
2005-11-07
10669
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다