본문 바로가기

개발/SQL6

Update 쿼리 시 주의사항 Update 쿼리 시 주의해야할 점이 있다. Update, Delete, Insert 쿼리는 Exclusive Lock 이 걸리는 쿼리라고 알고 있을 것이다. Exclusive Lock은 테이블 row에 걸리는 락이고, 읽기&쓰기가 모두 락이 걸린다. 하지만, update 쿼리 시 Where 절이 들어가는 쿼리는 해당 Where절에 인덱싱이 사용되는지 안되는지에 따라서 동작은 바뀐다. 인덱싱이 걸려있는 쿼리는 해당 row에만 락이 걸리고, 인덱싱이 걸려있지 않은 쿼리는 테이블 락이 걸린다. 2개의 차이는 데이터 양이 많아질 경우에 문제가 발생하는데, 데이터 양이 많아지면, 당연히 데드락이 발생할 가능성이 있으므로 문제가 있다. 따라서 인덱싱을 잘 설정해줘야 한다. 2022. 11. 3.
SSMS "인덱스가 배열 범위를 벗어났습니다." 위의 사진처럼 SSMS에서 데이터베이스를 연결하자마자 에러가 발생하는 현상이 있다. 이 경우는 SSMS 버전 보다 SQL Server 버전이 높을 경우 발생하는 에러이다. SSMS 는 10.0.4000.0 버전이고, 이 버전은 SQL Server 2008 설치할 때, 같이 설치됬던 버전이다. 연결 된 서버 버전은 SQL Server 2019 버전이며, 버전 정보는 공식 홈페이지를 확인하면 된다. https://support.microsoft.com/en-us/topic/kb4518398-sql-server-2019-build-versions-782ed548-1cd8-b5c3-a566-8b4f9e20293a KB4518398 - SQL Server 2019 build versions Table of con.. 2022. 2. 9.
저장 프로시저 인덱싱 분리 및 실행 계획 분리 저장 프로시저는 실행 계획을 캐시하고, 재사용한다. 보통 저장 프로시저를 간단하게 쓰는 경우도 많지만, 예를들어 게시판에서 고급검색 같은 기능을 추가하려면, 인덱스 설정을 잘해야하고, 검색 마다 실행 계획도 바뀔수도 있다. 그 때는 과연 어떻게 해야할까하는 내용을 포스팅해봅니다. 실행 계획은 문자열이 같은 내용끼리 같은 실행 계획을 씁니다. 예를 들면, 1번: SELECT * FROM 테이블 WHERE ID = @ID AND CONTENTS = @CONTENTS 이런 쿼리가 있다고 치면 2번: select * from 테이블 where id = @id and contents = @contents 위와 아래는 같은 결과를 가져오지만, SQL 실행 계획으로는 따로 구분이 된다. 즉, 인덱스도 다르게 설정이 .. 2022. 1. 25.
SQL Insert 전 중복 체크 저장 프로시저 아래와 같이 테이블이 있다고 가정한다. ID PK varchar(30) Title nvarchar(250) Contents nvarchar(max) CreatedDate datetime IsDeleted bit GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= CREATE PROCEDURE [up_Insert_Test] @ID varchar(30), @TITLE nvarchar(250), @CONTENTS nvarchar(max), @ISDELETED bit AS BEGIN -- SET NOCOUNT.. 2022. 1. 15.
반응형