반응형

mssql 18

[MSSQL] MSSQL 쿼리문에서 NOLOCK 사용해야하는 이유

1. (NOLOCK)SELECT 쿼리에서 테이블 공유 잠금을 피하고 다른 트랜잭션이 테이블을 업데이트하는 동안에도 읽을 수 있도록 하는 힌트. "읽기 잠금" 을 건너뛰므로 성능 향상 효과가 있다.① NOLOCK 사용: 쿼리 실행시간이 긴 SELECT 쿼리 실행 중에도 다른사용자가 테이블에 INSERT, UPDATE, DELETE 가능SELECT A.ORDERID , A.ORDERDATE , B.CUSTOMERNAME , C.PRODUCTNAME , C.QUANTITY FROM ORDERS A (NOLOCK) JOIN CUSTOMERS B (NOLOCK) ON A.CUSTOMERID = B.CUSTOMERID JOIN ORDERDETAILS C (NOLOCK) ON A.O..

Dev/Database 2024.10.02

[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

[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

[MSSQL] DB DeadLock 원인 쿼리찾기, 데드락 원인, 교착상태

DB DeadLock 이란? 모든 프로세스가 대기 상태이며 각 프로세스가 다른 프로세스가 가지고 있는 자원을 기다리고 있는 상태 기본적으로 SQL Server 데이터베이스 엔진은 교착 상태에 있는 작업에 대해 주기적으로 검사한다. 모니터가 교착상태를 감지하면 작업 중 하나를 선택하여 오류와 함께 트랜잭션을 종료한다. 이렇게 하면 다른 태스크가 해당 트랜잭션을 완료할 수 있다. 오류로 종료된 트랜잭션이 있는 애플리케이션은 트랜잭션을 다시 시도할 수 있으며, 일반적으로 교착 상태의 다른 트랜잭션이 완료된 후에 완료된다. SQL Server 에서 기본적으로 DeadLock 상태를 해제해주지만, DeadLock 을 자주 발생시키는 쿼리를 확인하고 개선할 수 있다. (단, DeadLock 을 유발한 쿼리는 발생 ..

Dev/Database 2023.10.25

[MSSQL] 테이블 디스크립션 확인, 테이블 description

MSSQL 테이블 description 확인하는 쿼리 DECLARE @TABLE_NAME NVARCHAR(50) = '테이블이름'; SELECT D.COLORDER AS COLUMN_IDX -- Column Index , A.NAME AS TABLE_NAME -- Table Name , C.VALUE AS TABLE_DESCRIPTION -- Table Description , D.NAME AS COLUMN_NAME -- Column Name , E.VALUE AS COLUMN_DESCRIPTION -- Column Description , F.DATA_TYPE AS TYPE -- Column Type , F.CHARACTER_OCTET_LENGTH AS LENGTH -- Column Length , F..

Dev/Database 2023.07.12

[MSSQL] MSSQL 날짜형식 yyyyMMdd, MSSQL 시간형식 hhmmss 이거만 알면 완전 정복

1. 현재 날짜, 현재 시간 SELECT FORMAT(getdate(), 'yyyyMMdd') -- 현재날짜 SELECT FORMAT(getdate(), 'hhmmss') -- 현재시간 2. 결과 3. 응용 SELECT FORMAT(getdate(), 'yyyy-MM-dd') -- 2023-05-23 SELECT FORMAT(getdate(), 'yyyy/MM/dd') -- 2023/05/23 SELECT FORMAT(getdate(), 'yyyy.MM.dd') -- 2023.05.23 SELECT FORMAT(getdate(), 'yyyy년 MM월 dd일') -- 2023년 05월 23일 SELECT FORMAT(getdate(), 'hh:mm:ss') -- 11:47:51 SELECT FORMAT(g..

Dev/Database 2023.05.23
반응형