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 3971 게시물 읽기
No. 3971
쿼리 좀 봐주세요...
작성자
김현(선무당)
작성일
2008-01-12 09:51
조회수
3,914

SQL 2005 에서요,


3개의 테이블이 있습니다.


table A                                            table B,                                          table C


aid       -  nvarchar(6)             bid       - nvarchar(6)                           cid - nvarchar(4)

bid       -  nvarchar(6)             bName - nvarchar(50)                         cName - nvarchar(50)

cid       -  nvarchar(4)

aName -  nvarchar(50)


이렇게 3개의 테이블을 조인해서 



SELECT A.aid, SUBSTRING(A.aName, 0, CHARINDEX(char(10), A.aName)) AS AName, b.Name, c.cName

FROM A A

LEFT OUTER JOIN B B ON B.bid = A.bid

LEFT OUTER JOIN C C ON C.cid = A.cid

WHERE  SUBSTRING(C.cName, 8, 4) = @cName



이런 쿼리를 만들었습니다.


결과는 잘 가져옵니다. 

그런데 WHERE  SUBSTRING(C.cName, 8, 4) = @cName  <- 이 부분이 좀 걸립니다.


속도가 좀 느린듯한 느낌이 있어서, 혹시 더 빠르고 바른 방법이 있는지 알고 싶습니다.


제가 원하는건 해당필드의 마지막 4자리 문자 와 변수 값이 같은 결과를 얻고 싶습니다.




그리고 다른 하나는 쿼리는 아니구요,


최대 접속자가 20~30명 정도인 window application program 환경 입니다.


그런데 window application program에서 얻는 결과 값 속도가 너무 불규칙 합니다.


어떨때는 빠르다가 어떨때는 너무 느리고, 제가 데이터베이스에 대해서 잘 몰라서 혹시,


데이터베이스를 모니터링 한다거나 혹은 다른 어떤 방법으로 체크 해 볼 수 있을까요?



그럼 고수님들의 고견을 기다립니다....

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

substring를 where 절에 사용하였다면 당연히 속도가 느립니다.

저건 어는 SQL에서도 마찬가지 입니다.  

왜냐하면 인덱스가 있는 키를 쿼리 할때에는 빠르지만...

이를 substring 또는 like 문을 사용하면 인덱스를 사용하여 쿼리를 하는 것이 아니라

full scan을 합니다.

따라서 저런 쿼리문을 사용한것 자체가 잘못이므로 이를 해결할 수 있는 방법은 없습니다.

만일 일정 길이 만큼난 가져온다면....

필드를 하나추가 하여 그에 대한 데이타를  미리 넣어 놓고, 인덱스를 걸어놓으면 속도는 

좋아질 수 있습니다.

가변적이라면 속도가 느려도 할 수 없죠.

어떤데는 빠르고 어떤데는 느리다고 하셨는데...

그건 데이타량 또는 하드웨어의 사용량등에 따라 달라질수 있습니다.

이승철(yamyo)님이 2008-01-14 21:42에 작성한 댓글입니다.

이승철님 감사 합니다...

도움이 많이 되었습니다...

좋은 하루 되세요..

김현(선무당)님이 2008-01-19 11:08에 작성한 댓글입니다.

mssql에서 되는건지는 모르겠으나.....

한번 찾아 보시죠.
일단 function을 사용한 인덱스를 생성 할수 있습니다.
그리고 해당 인덱스는 동일한 조건의 function를 사용했을때, 사용 할수 있습니다.

그리고 오라클의 경우, 해당 컬럼을 역으로 인덱싱 할수 있는 인덱스가 있습니다.- 이름이 기억이 안나네요...^^;

oracle에 있으면, mssql에도 비슷한게 있을것 같은데, 한번 찾아 보심이...^^

lnx4u님이 2008-01-24 10:55에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
3974뷰에대해서 좀 알려주세요... [1]
임한일
2008-01-15
3026
3973파일 자동증가 오류 [1]
김상범
2008-01-14
4186
3972ODBC 시스템 DSN 엑세스드라이버 추가에 관해 문의드립니다. [1]
박계균
2008-01-12
3488
3971쿼리 좀 봐주세요... [3]
김현
2008-01-12
3914
3970varchar->real [1]
줄리아
2008-01-12
2824
3969[급] 분산트랜잭션관련 문의 (메시지 7391)
reo007
2008-01-11
4517
3968pivot 사용에서 질문....
이경훈
2008-01-11
3353
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다