반응형

Dev/Database 48

[Oracle] 데이터 중복처리 막는법, for update 사용

FOR UPDATE 하면 오라클에서 중복처리를 막을 수 있는데, ORACLE은 row 단위로 LOCK을 하므로 해당 데이터만 중복 접근을 막아주는 것이다.사용자가 화면에서 버튼을 눌러 프로시저에서 STUDENT 테이블의 데이터를 수정하던 도중에, 사용자가 버튼을 한번 더 눌렀을 때, 서비스단에서 걸어둔 처리 완료 플래그 validation에 걸리지 않을 수 있다. 왜냐하면, 프로시저가 다 돌고나서 완료 플래그 처리하기전이기 때문이다.LOCK 을 걸고자 하는 데이터를 가져오는 쿼리에  FOR UPDATE 만 붙혀주면 된다.SELECT * INTO v_student FROM STUDENT WHERE NAME = P_NAME AND STD..

Dev/Database 2024.08.28

[Oracle] SELECT 1 FROM 의미, SELECT 1 의미, SELECT 1 FROM table 의 의미와 사용 예시

1. 개요"SELECT 1 FROM table" 구문은 주어진 테이블의 각 행에 대해 숫자 1을 반환한다.만약 테이블에 N개의 행이 있다면, 결과로 N개의 1이 반환된다.ex) users라는 3개의 행을 가지는 데이터베이스 테이블이 있다고 가정해보자.idnameage1Alice302Bob253Carol28이 테이블이 있을 때 "SELECT 1 FROM users" 구문을 실행하면 다음과 같은 결과가 반환된다.1111 2. 시사점SQL에서 1은 TRUE를 의미하므로,  "SELECT 1 FROM ..." 형식의 구문은 논리식으로 사용될 수 있다. 3. 사용 예시 - EXISTS 조건보통 이 구문은 WHERE 절의 (NOT) EXISTS 안에 있는 서브쿼리로 사용된다.-- 예시 쿼리 1: 특정 사용자가 존재..

Dev/Database 2024.07.10

[Oracle/MSSQL] 인덱스 종류, 인덱스 종류별 속도, 인덱스 스캔 종류, 인덱스 스캔 종류별 속도

인덱스 스캔이란? 데이터베이스의 옵티마이저가 데이터를 효율적으로 검색하기 위해 사용하는 다양한 방법을 의미한다. 인덱스 스캔의 종류를 빠른 순서대로 나열하면 같다. Unique Index Scan (유일 인덱스 스캔)유일한 값만을 찾기 때문에 가장 빠른 스캔 방법.유일 인덱스가 적용된 컬럼에 대해 특정 값을 조회할 때 사용ex) SELECT * FROM table WHERE unique_column = 'value'Index Range Scan (인덱스 범위 스캔)인덱스의 특정 범위 내에서 여러 행을 찾을 때 사용.일반적으로 조건절에 범위 조건이 포함될 때 사용ex) SELECT * FROM table WHERE indexed_column BETWEEN 'value1' AND 'value2'Index S..

Dev/Database 2024.07.09

[Oracle/MSSQL] WHERE 조건절 순서에 따른 속도차이, 조건절 순서 속도, WHERE 절 속도차이

TABLE에서 INDEX 가 참조하는 컬럼이 A,B,C 일때, 아래 두 쿼리중에 실행속도는 뭐가 더 빠를까? 1. SELECT * FROM TABLE WHERE A = 1 AND B=2 AND C=3 2. SELECT * FROM TABLE WHERE A = 1 AND C=3 AND B=2두 쿼리의 실행 속도는 사실상 동일하다. 왜냐하면, 데이터베이스의 쿼리 최적화 엔진이 WHERE 절의 조건 순서를 자동으로 최적화하여 가장 효율적인 방법으로 쿼리를 실행하기 때문이다. 옵티마이저가 똑똑해서 쿼리의 WHERE절을 살펴보고 키가 있는것을 우선 적용해 검색을 한다. 단, 인덱스의 쿼리가 모두 조건절에 들어있어야 인덱스를 100% 활용한다고 볼 수 있다. ​예를 들어, 다음 두 쿼리는:SELECT * FROM ..

Dev/Database 2024.07.04

[DBeaver] dbeaver 여러줄 동시편집, dbeaver 전체 대문자, dbeaver 전체 소문자, 쿼리 대소문자 변경 단축키, 쿼리 여러줄 동시편집, mssql, oracle

1. 여러줄 동시편집, 동시 커서- Alt + Shift + a : 여러 줄을 동시에 편집할 수 있도록 바뀐다. on/off 개념 2. 전체 쿼리 대문자, 소문자로 변경- Alt + Shift + x : 전체 쿼리문을 대문자로 변경해준다.- Alt + Shift + y : 전체 쿼리문을 소문자로 변경해준다.

Dev/Database 2024.06.21

[DB/MSSQL] 열 이름이 불확실합니다, jdbc SQLServerException

위와 같이 Eclipse 에러 발생하였다. "열 이름이 불확실합니다."이 에러는 여러개의 테이블을 조인해오는 과정에서 두 개 이상의 테이블에서 동일한 컬럼 이름을 가지는데, 어떤 테이블의 컬럼값인지 명시되어있지 않아, 말 그대로 열 이름이 불확실하여 발생하는 오류이다.예를 들어, STUDENT 테이블과 PROFESSOR 테이블에서 모두 NAME 이라는 컬럼을 가지는데, 아래와 같이 SELECT 문을 작성하면 "열 이름이 불확실합니다."  에러가 발생하는 것이다. SELECT NAME -- STUDENT의 NAME인지, PROFESSOR의 NAME인지 모름 , STUDENT.STDNUM , STUDENT.ADDRESS , PROFESSOR.PFSNUM , PROFESS..

Dev/Database 2024.06.13

[DB/MSSQL] INSERT INTO SELECT 일부만, 일부만 INSERT INTO SELECT

INSERT INTO SELECT 를 사용하여 SELECT 해온 데이터를 바로 INSERT 할 수 있다.그런데, 이때 PK 컬럼이 있어서 일부 데이터만 SELECT 해온 값을 사용하고, 일부값은 직접 입력하고자 한다.INSERT INTO STUDENT ( NAME, STDKY, BIRDAT , TELNUM, ADDRESS , CREDAT, CRETIM ) SELECT #NAME# -- 화면에서 받아온 값 , NEXT VALUE FOR SEQ_STDKY -- PK값 시퀀스 , #BIRDAT# -- 화면에서 받아온 값 , '010-0000-0000' -- 값 직접 입력 ..

Dev/Database 2024.06.12

[DB/SQL] 쿼리 튜닝하는법, 오라클 쿼리튜닝, MSSQL 쿼리 튜닝, 쿼리 성능 개선하는법

쿼리 성능이 나오지 않을때, 기본적으로 확인할 수 있는 쿼리 개선방법이다. 1. INNER, OUTER JOIN 있을 때 무조건 OUTER JOIN을 마지막에 걸기2. 쿼리에서 데이터를 SELECT 해올 필요가 없는데 불필요한 조인 하는 경우 제거SELECT A.COLMN1, B.COLMN2FROM TABLE_A A INNER JOIN TABLE_B B ON A.COLMN1 = B.COLMN1 INNER JOIN TABLE_C C ON A.COLMN2 = C.COLMN2 -- TABLE_C 의 데이터는 안가져오므로 불필요한 조인.이를 제거해야함. 3. 3개이상 테이블 조인할때, 테이블 작은 순서로 조인하기4. 실행계획 확인하기  (1) Oracle의 경우, DBeaver 에서 Ctrl +..

Dev/Database 2024.06.11

[Oracle] Oracle 19c 삭제, 오라클19c 삭제하는법, 오라클 삭제, Oracle 삭제

오라클을 완전히 삭제하는 과정은 레지스트리를 건드리는 등의 위험한 작업으로 인해 복잡할 수 있다. 아래 과정에 따라 64-bit 환경에서 오라클을 완전히 삭제할 수 있다. 1. 작업관리자를 열어 현재 oracle 관련 프로그램이 실행되고 있는지 확인하고, Oracle 관련 프로그램이 실행되고 있으면 종료해준다. 오라클 관련 프로그램이 실행 중일 경우, 시스템 파일이나 레지스트리 항목이 잠겨 있어 삭제가 제대로 이루어지지 않을 수 있다. 따라서 작업관리자를 통해 Oracle 프로그램이 실행 중이 아님을 확인하고 진행하는 것이 중요하다. 2. 레지스트리 편집기를 열어서 컴퓨터 > HKEY_LOCAL_MACHINE > SOFTWARE > Oracle* 관련 폴더를 모두 삭제한다.Windows  레지스트리는 서..

Dev/Database 2024.06.10

[Oracle] 캐시를 사용하지 않고 실행되게 하는법, Oracle NO CACHE, 캐시 옵션끄기, 캐시 사용안하기

쿼리를 실행하면 결과가 캐시에 저장되어 다음에 동일한 쿼리가 실행될 때 캐시된 결과를 반환할 수 있다.이는 반복 실행으로 인해 처음 실행했을 때보다 더 빠른 결과를 제공하므로, 실행시에는 좋지만 항상 동일한 실행환경에서의 쿼리 속도를 측정하여, 쿼리를 튜닝해야하는 경우에는 해당 옵션이 불필요하다. 1. 일반 쿼리에서 캐시 사용하지 않기아래와 같이 힌트를 사용할 경우 캐시를 사용하지 않고 쿼리를 실행할 수 있다.SELECT /*+ NO CACHE */ column1, column2 FROM table_name; 2. 프로시저 실행시 캐시 사용하지 않기 (1) 프로시저 내부 쿼리에 모두 /*+ NO CACHE */ 힌트를 달아준다. (2) 세션 캐시 비활성화 (3) 관련된 테이블 오프라인으로 만들고 테스트A..

Dev/Database 2024.06.04
반응형