* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
Window7 32bit | |
8버전 | |
8.4.3.3086 | |
asp.net |
* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 | 재현 가능한 Source와 SQL |
관련 테이블(인덱스, 키정보 포함) 정보 | CUBRID 홈 디렉토리 아래 log 디렉토리 압축 |
-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------
특정한 실시간 데이터일때
실행 SQL)
select ALL,TYPE1,TYPE2,(type1+type2)
from(
(select count(*) from test) ALL
,(select count(*) from test where a='t') type1
,(select count(*) from test where a='d') type2
)a
결과)
dat ALL type1 type2 type1+type2
2013-08-22 73625 31009 42616 73625
2013-08-23 65489 18460 47041 65501
위와 같이 실행 했을 경우에
전체는 all과
type1+type2한 값의 전체 값이 다릅니다.
하지만 이미 지난 데이터일 경우
현재 시점의 실시간 데이터가 아닌 경우에는
정상적으로 합계가 표시 됩니다.
내부적으로 실행 시점의 데이터를 가지고 하는 것이 아닌가요.?
이유가 뭔지 알고 싶습니다.계산 값이 잘못 나오는 이유를 알고 싶습니다.
안녕하세요. 답변이 늦어 죄송합니다.
문의하여 주신 해당 내용에 대해 내부 확인 결과 같은 결과가 나왔습니다.
확인 결과는 아래와 같습니다.
1. 환경 : 멀티 쓰레드로 insert 중 해당 쿼리 실행
2. 쿼리 :
SELECT test1, TYPE1, TYPE2, (type1+type2)
FROM( SELECT (select count(*) FROM ptest_123) test1, (select count(*) from ptest_123 where a='a') type1,
(select count(*) from ptest_123 where a='b') type2) a
3. 결과
NO test1 type1 type2 (type1+type2)
1 67989 34032 34036 68068
- 위의 결과도 마찬가지로 두 개의 값이 다릅니다.
- 이것은 3개의 서브쿼리가 동시수행 되는 과정에 있어서, 실시간으로 데이터가 생성되기 때문입니다.
- 3개의 서브쿼리가 동시적으로 수행되더라도 각각의 실행 시점에 따라 미세한 시간 차이가 있기 때문에 전체의 count 값과 합하여진 값이 다를 수 있습니다.