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
운영게시판
최근게시물
MS-SQL Q&A 7155 게시물 읽기
No. 7155
PK INDEX 관련 질문 드립니다.
작성자
거북이
작성일
2019-01-09 17:52
조회수
1,995

안녕하세요

인덱스 관련하여 질문 드립니다.

 

테이블 TableA가 있습니다.

 

Table A 는 c1 부터 c10까지 10개의 컬럼이 존재합니다.

그중에 c1(int형), c2(int형), c3 (datetime형) 는 primary key 로 지정 되어있습니다.

 

1,2번 쿼리의 차이점은 어떤것이 있을까요?

 

- 1번 쿼리

select *

from TableA

where c1 = 1

and c2 = 1

and convert(varchar, c3, 112) = '20190101';

 

- 2번 쿼리

select *

from TableA

where c1 = 1

and c2 = 1

and c3 = convert(datetime,'20190101');

 

 

실제 운영단에서 2번와 같이 작성된 쿼리가 락을 유발하는 듯하여 1번과 같이 변경을 하였습니다.

혹시 2번 유형의 쿼리가 락을 유발할 수 있을까요?

 

참고로 TableA 테이블은 트랜젝션이 많이 발생하는 테이블입니다.

 

부탁드리겠습니다.

감사합니다.

 

 

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

1번 쿼리는
 - c3 를 가공했으므로 c1, c2 만 엑세스 조건으로 사용하고 c3 는 필터조건으로 사용됩니다.


2번 쿼리는
 - c1, c2, c3 를 모두 엑세스 조건으로 사용합니다.
 - 다만, c3 에 시분초까지 저장되어 있는 경우 결과가 틀리게 됩니다.


3번 쿼리는
SELECT *
  FROM TableA
 WHERE c1 = 1
   AND c2 = 1
   AND c3 >= CONVERT(datetime, '20190101', 112)
   AND c3 <  DATEADD(dd, 1, CONVERT(datetime, '20190101', 112))
;

 

마농(manon94)님이 2019-01-09 18:15에 작성한 댓글입니다.

OracleDB와 달리 MS-SQL은 SELECT문을 실행해도 LOCK이 걸립니다.

마농님 가이드 처럼 처리하시는 것이 성능상은 최선입니다.

트랜젝션이 많이 발생할 경우

단순한 select 쿼리(정합성이 중요하지 않은 경우)에는 테이블명 뒤에 with(nolock) 힌트를 주어서

속도 위주로 처리 할 수 있습니다.

박인호(paerae)님이 2019-01-10 09:42에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
7158select ~ case [1]
help me
2019-03-15
1976
7157mssql invalid object는 어떻게 check하나요?
톰보우
2019-02-22
1861
7156테이블 반환 함수 동적쿼리 방법 문의 드립니다.
임민규
2019-01-10
2038
7155PK INDEX 관련 질문 드립니다. [2]
거북이
2019-01-09
1995
7154새해 복 많이 받으세요~ 쿼리 질문 하나 드립니다~ [4]
이성원
2019-01-03
2260
7153선입선출 구현 [3]
tiger
2018-11-21
3020
7152. 관련 용어 [1]
권기혁
2018-11-20
2286
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다