1. 스칼라 서브쿼리: SELECT절에 들어가며 반환 값은 한 개
  2. 인라인뷰: FROM 절에 들어가며 뷰와 비슷한 형태
  3. 서브쿼리: WHERE 절에 들어감

SELECT (SELECT C FROM T S WHERE S.C = I.C)           ①

  FROM (SELECT C FROM T) I                                   ②

WHERE EXISTS (SELECT C FROM T B WHERE B.C = I.C) ③

반응형
  • Toad : Ctrl+E
    • 관련 OBJECT 정보 확인 (테이블, 인덱스 등)
      • Ctrl+OBJECT 명칭 클릭 / OBJECT 블록지정 후 F4
  • SQL Developer: F10
  • EXPLAIN PLAN FOR
    • 실행계획 저장
      EXPLAIN PLAN FOR
      쿼리문;
    • 실행계획 조회
      SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);


참고자료

https://m.blog.naver.com/sophie_yeom/220891529668

http://cusmaker.tistory.com/181

반응형

  • SCAN
    DB에 적재된 데이터를 읽는 작업
    • FULL TABLE SCAN: 테이블 전체 스캔
      • 많은 데이터를 이용할 때 좋음. 테이블의 일정 비율 이상되는 데이터가 필요할 때.
    • ROWID SCAN: Oracle 고유 컬럼인 ROW ID라는 행번호로 스캔
      • Where 조건절에 ROWID를 입력하는 경우 이용.
      • 추출할 데이터양을 제한할 때 사용 (MSSQL의 TOP N과 유사한 용도)
    • INDEX SCAN: Index를 이용하여 데이터 스캔
      • 적은 데이터를 추출할 때 좋음
      • INDEX UNIQUE SCAN
        • UNIQUE INDEX를 사용하는 경우.
        • 조건절에 UNIQUE INDEX 컬럼 = 로 명시
        • 조건에 부합하는 데이터를 찾을 경우 탐색을 종료함
      • INDEX RANGE SCAN (DESCENDING)
        • 가장 흔하게 사용되는 방식
        • INDEX 내의 조건절에 명시된 범위의 데이터에 오름차순으로 접근 (ORDER BY DESC를 한 경우 내림차순)
        • 조건절이 INDEX 선행컬럼이 있는 경우. 조건값에 와일드 카드를 이용하는 경우 ( LIKE 'AA__%')
      • INDEX SKIP SCAN (DESCENDING)
        • 결합 인덱스의 후행컬럼은 있으나 선행컬럼(첫번째컬럼)이 조건절에 없는 경우  (ORDER BY DESC를 한 경우 내림차순)
        • 선행컬럼이 범위 검색 조건일 경우(LIKE, BETWEEN, 부등호)
        • 옵티마이저가 INDEX 내에서 조회하는 것이 TABLE FULL SCAN보다 빠르다고 판단한 경우
        • INDEX COLUM: A B C
          WHERE B = 'AAA'
          와 같이 작성된 경우 WHERE절에 A(선행컬럼)가 없는 경우.
        • 힌트: INDEX_SS (반대 NO_INDEX_SS)
      • INDEX FULL SCAN
        • 인덱스 블록 전체를 순차적으로 접근하는 방식
        • INDEX RANGE SCAN과 동일한 매커니즘으로 동작
        • 최적의 인덱스가 없는 경우, FULL TABLE SCAN보다 효율적일 경우
        • ORDER BY INDEX 컬럼 혹은 MIN, MAX값을 구하는 경우 용이
          NOT NULL 조건과 함께 ORDER BY 사용해야 INDEX FULL을 이용할 수 있음, 결과집함이 많을 경우 FULL TABLE SCAN이 나음
        • SELECT /*+ INDEX(T) */ C FROM T WHERE C IS NOT NULL
          인덱스 이용, INDEX 컬럼에 NULL이 아닌 전체이므로 INDEX 전체가 되는 것
          (NULL이 있으면 INDEX를 사용할 수 없음)
      • INDEX FAST FULL SCAN
        • 인덱스 블록 전체를 병렬 처리로 접근하는 방식
        • INDEX FULL SCAN과 달리 순차적이지 않으므로 정렬을 지원하지 않음
        • 병렬처리를 지원하여 속도가 빠름
        • 단, 힌트를 명시해야만 이용 가능
        • 힌트: INDEX_FFS (반대 NO_INDEX_FFS)
    • INDEX 힌트 사용법
      /*+ INDEX_FFS(테이블명) */:                     SELECT /*+ INDEX_FFS(T) */ C FROM T
      /*+ INDEX_FFS(테이블명 인덱스명) */:         SELECT /*+ INDEX_FFS(T IDX) */ C FROM T
      /*+ INDEX_FFS(테이블명 테이블(컬럼명)) */: SELECT /*+ INDEX_FFS(T T(C)) */ C FROM T

인덱스에 관련된 다양한 자료를 조사하여 정리
INDEX 전체 
INDEX FULL SCAN 
INDEX FAST FULL SCAN


반응형

디버깅 시 중단점(브레이크 포인트) 가운데가 빈 동그라미로 변하면서 중단점이 먹히지 않는 문제
중단점에 마우스를 대보면
중단점이 적중되지 않습니다. 현재 소스코드가 ...에 빌드된 버전과 다릅니다
the breakpoint will not currently be hit
라는 메세지가 발생한다.


원인은 말 그대로 소스코드 내용과 파일로 빌드된 프로그램의 소스코드 내용이 달라서 발생하는 것.


해결방법이 여러가지가 있다
1. 도구 - 옵션 - 디버깅 - 일반 - 소스 파일이 원래 버전과 정확하게 일치해야함 체크 해제
이 해결법의 문제점은 일치하지 않아도 실행이 되지만 버전이 다를 경우 중단점을 원하는 위치에 설정할 수 없다


2. 파일 - 저장의 고급옵션에서 인코딩을 ANSI > UNICODE로 변경
개인 프로젝트일 경우 문제가 없지만 소스버전관리를 하는 공용 프로젝트일 경우 함부로 수정하기 곤란하다
심지어 다른 사람은 문제 없이 쓰는 경우 더더욱....


3. 현재 프로젝트 빌드
제일 정확하지만 번거로운게 함정이다
ㄴ디버깅 툴 중 일시정지 > 계속 클릭. 이때 수정된 소스를 재빌드 한다. 단, 몇가지 특이케이스는 빌드 안되는 경우가 있다(2021.06.02)

반응형

마우스 이벤트 관련 처리기 (MouseEventArgs)

- EventArgs

  ㄴMouseEventArgs

마우스 포인터의 위치, 눌린 단추, 휠의 스크롤 여부


마우스 이벤트 동작 순서

- 클릭 시

1. MouseDown 이벤트: 마우스 버튼이 눌리는 순간

2. Click 이벤트

3. MouseClick 이벤트

4. MouseUp 이벤트: 마우스 버튼이 올라오는 순간(누르던 손가락을 뗀 순간)

- 더블클릭 시

1. MouseDown 이벤트: 마우스 버튼이 눌리는 순간

2. Click 이벤트

3. MouseClick 이벤트

4. MouseUp 이벤트: 마우스 버튼이 올라오는 순간(누르던 손가락을 뗀 순간)

5. MouseDown이벤트

6. DoubleClick 이벤트 (이벤트를 추가한 컨트롤 설정에 따라 동작하지 않을 수도 있음)

7. MouseDoubleClick 이벤트

8. Mouse Up 이벤트


Mouse 이벤트 없이 마우스 정보 추출

Control.MouseButtons

  현재 눌린 마우스 버튼 정보 속성 변수

  MouseButtons 마우스 단추 상수 (MouseButtons.Left/Right)

Control.MousePosition

  현재 마우스 포인터의 화면 좌표 속성 변수

Contorl.PointToClient(System.Drawing.Point p)

  입력한 좌표를 클라이언트 기준 좌표로 반환(현재 개발중인 프로그램 기준 좌표)

Control.PointToScreen(System.Drawing.Point p)

  입력한 좌표를 화면 기준 좌표료 반환




출처: 

https://docs.microsoft.com/ko-kr/dotnet/framework/winforms/mouse-events-in-windows-forms


https://docs.microsoft.com/ko-kr/dotnet/framework/winforms/how-mouse-input-works-in-windows-forms

반응형