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
운영게시판
최근게시물
MySQL Q&A 31204 게시물 읽기
No. 31204
MYSQL 자동형변환으로 인한 조인 조건 문제
작성자
권순환(soonani82)
작성일
2018-12-12 13:59ⓒ
2018-12-12 14:38ⓜ
조회수
2,608

 MYSQL 자동형변환으로 인한 조인 조건 문제


#MYSQL쿼리문 
#A테이블 100만건 B테이블 1000만건이 있다고 가정한상태로 좋은형태의 쿼리문을 작성하고 싶습니다.
 
SELECT A.NNTX_NO, B.NNTX_NO
FROM (
SELECT 1772 NNTX_NO FROM DUAL
UNION ALL
SELECT 1773 NNTX_NO FROM DUAL
) A
LEFT JOIN (
SELECT '1772'        NNTX_NO FROM DUAL 
UNION ALL
SELECT '1772.0 ~ 34' NNTX_NO FROM DUAL
  ) B ON A.NNTX_NO = B.NNTX_NO
WHERE  1=1
AND    A.NNTX_NO = 1772
;
 
#결과
#A.NNTX_NO B.NNTX_NO
#1772 1772
#1772 1772.0 ~ 34 <---조인이 걸리지 말았어야 했던 레코드
#아마도 CCXX_KEY 문자열이 앞쪽부분이 숫자로 인식이되고 공백이하의 문자부터는 짤려서 1772.0숫자로 인식되서 조인이 되는거같음.
 
#질문. 쿼리문을 어떤식으로 바꿔야 가장효율이 좋을가요?
 
#예상1) 키값형태를 바꿔야 한다. 키구조의 설계를 다시해봐라.
#예상2) FORM절의 WHERE조건이 이미걸려있음으로 조인시에 A.NNTX_NO를 문자형으로 형변한 해야한다.
#예상3) 조인시에 B.NNTX_NO 형변환, 문자변환을 해야 A.NNTX_NO 의 인덱스를 탈수있다.
#예상4) 2개의 테이블로 많은 쿼리들이 생성될수 있음으로, 무조건 LEFT테이블 컬럼을 형변환하여 사용한다.
 
#많은 가름침 부탁드립니다. 별문제가 다생기네요.. 

 

이 글에 대한 댓글이 총 1건 있습니다.
SELECT A.NNTX_NO, B.NNTX_NO
FROM (
		SELECT 1772 NNTX_NO FROM DUAL
		UNION ALL
		SELECT 1773 NNTX_NO FROM DUAL
	 ) A
LEFT JOIN (
				SELECT '1772'        NNTX_NO FROM DUAL 
				UNION ALL
				SELECT '1772.0 ~ 34' NNTX_NO FROM DUAL
		  ) B ON B.NNTX_NO = convert(A.NNTX_NO, char)
WHERE  1=1
AND    A.NNTX_NO = 1772
;
A, B 모두 index 등 정상적이다면
자동형변환으로 B가 index를 못타고, 결과도 잘못 나오는 문제로
명시적 형변환 시키면 문제 없습니다.
박인호(paerae)님이 2018-12-12 15:48에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
31207mariadb 서비스 시작시 오류메시지가 표시 [2]
매수신호
2018-12-19
3185
31206테이블 사이즈 문의 [1]
지나가다
2018-12-13
2506
31205join 관련 질문드려요 [2]
hooney
2018-12-13
2524
31204MYSQL 자동형변환으로 인한 조인 조건 문제 [1]
권순환
2018-12-12
2608
31203select table_name쿼리문 질문이요 ㅠㅠ [7]
데베너무어려워요
2018-12-07
2637
31202[속도문제] 증가키 구조 테이블 레코드 삭제 or 플레그 비트?? [1]
권순환
2018-12-04
2381
31201replace 질문입니다. [2]
이기자
2018-11-28
2390
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다