반응형

전체 텍스트 검색 인덱스 관리

 

 

테이블에 전체 텍스트 인덱스를 추가하는 구문은 CREATE FULLTEXT INDEX 구문입니다.

테이블에 전체 텍스트 인덱스를 생성할 때 NO POPULATION옵션을 설정하지 않는 경우 인덱스가 생성되면 즉시 전체 인덱스 채우기가 수행됩니다.

NO POPULATION옵션은 CHANGE_TRACKING옵션이 OFF일 경우에만 사용할 수 있습니다.

CHANGE_TRACKING옵션은 MANUAL, AUTO, OFF 플래그를 갖습니다.

 

CHANGE_TRACKING 옵션이 MANUAL일 경우 1)인덱싱 SQL Server 에이전트를 사용하여 일정에 따라 수행되거나 사용자에 의해 수동으로 1)인덱스 채우기를 수행할 수 있습니다.

수동으로 인덱스 채우기를 수행하는 구문은 ALTER FULLTEXT INDEX 구문입니다.

AUTO일 경우 테이블에서 데이터가 수정될 때 전체 텍스트 인덱스를 자동으로 업데이트합니다.

OFF일 경우 인덱싱된 데이터의 변경 내용 목록을 유지하지 않습니다. 이 모드에서만 NO POPULATION옵션을 설정할 수 있는데 SQL Server에서 인덱스를 만든 후 전체 인덱스 채우기를 수행하지 않습니다. MANUAL 모드와 OFF 모드가 다른 부분이 바로 이 부분입니다.

인덱스를 생성한 후 전체 인덱스를 채우려면 ALTER FULLTEXT INDEX구문을 START {FULL | INCREMENTAL} POPULATION절과 함께 실행해야 합니다.

 

위에서 언급한 내용을 토대로 전체 텍스트 인덱싱을 관리하는 유형을 다음과 같이 정리해 볼 수 있습니다.

 

1.     변경 내용 자동 추적에 의한 인덱스 자동 채우기

인덱스를 생성할 때 CHANGE_TRACKING옵션을 AUTO로 설정합니다.

관련 테이블의 데이터가 변경될 경우 자동으로 인덱스를 채우게 됩니다.

하지만 즉시 반영되지 않는 경우도 있는데, 이럴 경우 전체 텍스트 인덱싱 프로세스를 모니터링하여 문제를 진단할 수 있습니다. 관련 정보는 다음 링크를 참조하세요.(Transact-SQL 함수를 사용하여 전체 텍스트 속성  얻기)

 

이 모드는 관련 데이터의 갱신이 빈번하지 않고 해당 데이터의 크기가 비교적 작을 경우에 설정하면 SQL Server에 부하를 주지 않고 인덱스를 관리할 수 있습니다.

 

2.     SQL Server 에이전트의 일정에 의한 인덱스 채우기

인덱스의 CHANGE_TRACKING옵션이 MANUAL이거나 OFF일 경우 전체 텍스트 인덱스 채우기는 일정에 의해 관리할 수 있습니다.

 

SQL Server 에이전트의 일정은 전체 텍스트 카탈로그 단위로 수행됩니다.

따라서 전체 텍스트 카탈로그에 테이블이나 인덱싱된 뷰를 구성할 경우 데이터의 변경 빈도, 변경되는 데이터의 크기, 변경되는 데이터의 양이 많거나 적은 시간대(요일)을 고려하여 구성해야 합니다.

이러한 정보가 유사한 테이블이나 뷰를 하나의 전체 텍스트 카탈로그에 구성하면 일정에 의해 수행되는 인덱스 채우기 작업으로 시스템에 부하를 주는 일을 최소화할 수 있습니다.

 

3.     수동으로 인덱스 채우기 수행(즉시 수행)

인덱스의 CHANGE_TRACKING옵션이 MANUAL이거나 OFF일 경우 관리자(사용자)가 직접 인덱스 채우기를 수행할 수 있습니다.

 

인덱스 채우기를 직접 실행할 경우 ALTER FULLTEXT INDEX 구문에 {START | STOP | PAUSE | RESUME } POPULATION 절을 사용하여 수동 인덱스 채우기를 수행합니다.

 

인덱스 채우기를 시작하려면 START {FULL | INCREMENTAL | UPDATE} POPULATION 절을 사용합니다.

FULL모드는 이미 인덱싱된 행을 포함해서 테이블의 모든 행을 검색합니다.  

INCREMENTAL모드는 마지막 채우기 이후 수정된 행만 검색합니다.

, 해당 테이블에 timestamp 유형의 열이 있는 경우에만 적용할 수 있습니다. timestamp 유형의 열이 없는 경우 FULL채우기를 수행합니다.

UPDATE모드는 해당 인덱스의 변경 내용 추적이 수동으로 설정되어 있을 때 마지막으로 업데이트된 후 모든 삽입, 업데이트 또는 삭제를 처리합니다. 주의할 것은 백그라운드 인덱스 업데이트(일정에 의한) 또는 변경 내용 추적이 자동으로 설정되어 있으면 안 됩니다.

 

STOP POPULATION START POPULATION에 의한 인덱스 채우기를 중지합니다. 백그라운드 인덱스 업데이트 또는 자동 변경 내용 추적을 중지하지 않습니다. 자동 변경 내용 추적을 중지하려면 SET CHANGE_TRACKING OFF절을 사용해야 합니다.

 

{PAUSE | RESUME} POPULATION  START FULL POPULATION에 의한 전체 채우기에만 사용할 수 있습니다.

 

이상으로 전체 텍스트 인덱스를 관리하는 방법에 대해서 알아보았습니다.

위의 내용을 기초로 전체 텍스트 인덱스를 관리하는 전략을 수립하면 됩니다.

, 실제 운영하는 데이터베이스에서 전체 텍스트 인덱스를 변경 내용 자동 추적에 의한 채우기를 설정할 것인지 SQL Server 에이전트에 의한 일정으로 채우기를 수행할 것인지의 판단은 데이터의 양의 변화와 변경 빈도 및 접근 빈도를 지속적으로 모니터링하여 결정지어야 합니다.

 

1) 인덱스 채우기 인덱싱과 같은 의미로 사용됩니다.



출처: https://devman.tistory.com/entry/SQL-Server-전체-텍스트-검색-3-전체-텍스트-인덱스-관리 [코딩하는 녀석]

반응형
반응형
-- Full Text Search 를 enable로 설정
exec sp_fulltext_database @action='enable'

-- Full Text Search 한글로 설정되어있는지 확인
EXEC sp_help_fulltext_system_components @component_type = 'wordbreaker', @param = 1042;

-- Full Text Search 에 한글이 설치되어있는지 확인
SELECT * FROM sys.fulltext_languages WHERE lcid='1042';

-- 현재 설치되어있는 언어 목록들
SELECT * FROM sys.fulltext_languages;

-- Catalog 재구성
ALTER FULLTEXT CATALOG [YourCatalogName] REBUILD

-- catalog 진행 현황 SQL
DECLARE @CatalogName VARCHAR(MAX)
SET     @CatalogName = 'YourCatalogName'
SELECT
    DATEADD(ss, FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateCompletionAge'), '1/1/1990') AS LastPopulated
     ,(SELECT CASE FULLTEXTCATALOGPROPERTY(@CatalogName,'PopulateStatus')
                  WHEN 0 THEN 'Idle'
                  WHEN 1 THEN 'Full Population In Progress'
                  WHEN 2 THEN 'Paused'
                  WHEN 3 THEN 'Throttled'
                  WHEN 4 THEN 'Recovering'
                  WHEN 5 THEN 'Shutdown'
                  WHEN 6 THEN 'Incremental Population In Progress'
                  WHEN 7 THEN 'Building Index'
                  WHEN 8 THEN 'Disk Full.  Paused'
                  WHEN 9 THEN 'Change Tracking' END) AS PopulateStatus
                  
 -- Full Text indexing
ALTER FULLTEXT INDEX ON [YourDBName] START FULL POPULATION                 


-- 하단은 FREETEXT, FREETEXTTABLE 사용방법

-- FREETEXT 를 이용한 Full Text Searching
SELECT * FROM YOUR_TABLE WHERE FREETEXT(YOUR_COLUMN, 'Searching keywords')

-- FREETEXTTALBE 을 이용한 Full Text Searching
SELECT FT_TBL.*,
       KEY_TBL.RANK
FROM YOUR_TABLE AS FT_TBL
         INNER JOIN FREETEXTTABLE(YOUR_TABLE,
                                  (YOUR_COLUMN_1, YOUR_COLUMN_2 ,YOUR_COLUMN_3),
                                  'Searching keywords',
                                  LANGUAGE N'Korean', 10) AS KEY_TBL
                    ON FT_TBL.Index = KEY_TBL.[KEY]
ORDER BY RANK DESC;
-- column1, column2, column3 순서대로 Rank점수가 산정
-- LANGUAGE N'Korean', 10 => 사용할 언어는 한국어, Rank 점수가 높은 10개를 순서대로 가져오기

 

반응형
반응형

구글 번역으로 인한 발번역이 있습니다. 한국어 설정은 제일 하단에 기입했습니다.

전체 텍스트 검색 정보

정의의 도움으로 전체 텍스트 검색을 이해합시다.

간단한 정의

전체 텍스트 검색은 빠른 답변을 위해 문자 기반 데이터를 최적으로 검색하는 데 사용됩니다.

Microsoft 정의

SQL Server 및 Azure SQL Database (클라우드 버전의 SQL 데이터베이스)에서 전체 텍스트 검색을 사용하면 사용자와 응용 프로그램이 SQL Server 테이블의 문자 기반 데이터에 대해 전체 텍스트 쿼리를 실행할 수 있습니다.

전체 텍스트 쿼리 란?

전체 텍스트 쿼리는 텍스트 데이터가있는 열에 대해 작성되고 실행되어 데이터 패턴을 찾는 특수한 종류의 쿼리입니다. 이 문제에 대해서는 해당 열에 대해 전체 텍스트 검색을 활성화해야합니다.

적합성

전체 텍스트 검색은 다음 SQL Server 버전과 호환됩니다.

  1. SQL Server 2005 이상
  2. Azure SQL 데이터베이스

전문 검색 현대 버전

SQL 2016과 같은 최신 SQL Server 버전에서는 전체 텍스트 검색을 의미 검색과 함께 설치할 수 있습니다.

전체 텍스트 검색 – SQL Server 옵션

SQL Server를 설치할 때는 기본적으로 전체 텍스트 검색이 설치되지 않습니다. 원래 SQL Server를 설치하는 데 사용한 설정을 사용하여 현재 SQL 인스턴스에 더 많은 기능을 추가하여 선택적으로 설치해야합니다.

전체 텍스트 검색 – 데이터베이스 기본값

모든 SQL 데이터베이스는 기본적으로 전체 텍스트 검색과 함께 사용할 수 있습니다. SQL 데이터베이스에서 전체 텍스트 검색을 사용하기 전에 요구 사항을 제외하고 추가 설치가 필요하지 않습니다.

대소 문자 구분

Microsoft 문서에 따르면 전체 텍스트 검색은 대소 문자를 구분하지 않으므로 "제어판", "제어판"및 "제어판"이라는 단어는 모두 동일하게 취급됩니다.

전체 텍스트 검색 설정

언급했듯이 SQL Server를 설치하는 데 사용한 것과 동일한 설치 파일을 사용하여 기존 SQL Server 설치의 기능으로 전체 텍스트 검색을 추가해야합니다.

SQL Installer 실행

SQL Server 설치 관리자를 실행하여 시작하십시오. 저장하지 않고 설치 프로그램에서 직접 실행하려는 경우 드라이브로 마운트 할 수있는 옵션을 제공합니다.

설치 파일 실행

Setup.exe 파일을 클릭하여 SQL Server 설치를 실행하십시오.

기능으로 추가

설정 파일을 실행하자마자 일부 초기 검사가 수행됩니다. 이러한 검사가 통과되면 설치 탐색 모음 (섹션)에서 “기존 설치 옵션에 기능 추가” 를 선택해야합니다 .

현재 서버를 선택하십시오

다음으로 전체 텍스트 검색을 설치할 현재 / 잠재 서버를 선택하십시오. 우리의 경우 SQL 2016입니다.

추가 할 인스턴스 기능을 선택하십시오.

다음으로, 검색  전체 텍스트 및 의미 추출 추출 기능을 선택하십시오 (이전 SQL 버전에이 기능을 추가하면 의미 추출이 표시되지 않을 수 있음).

연습 전에이 기능을 이미 추가 했으므로 스크린 샷에서 회색으로 표시됩니다. 그러나 처음으로 추가하는 사람에게는 활성화되어 있고 약간의 시간이 걸리는 설치가 가능합니다.

전체 텍스트 검색 설치 상태 확인

전체 텍스트 검색이 설치되면 마스터 데이터베이스에 대해 다음 T-SQL 스크립트를 실행하여 확인할 수 있습니다.

-- Is Full-Text Search installed then 1 or 0

SELECT fulltextserviceproperty('IsFulltextInstalled') as [Full-Text Search]

전체 텍스트 검색을 사용하여 단어 및 구문 검색

이제 전체 텍스트 검색을 사용하여 단어 및 구에 대한 몇 가지 기본 검색 작업을 수행합니다.

샘플 데이터베이스 설정

전체 텍스트 검색의 기본 사용법을 이해하려면 다음과 같이 SQLDevBlogV6 이라는 샘플 데이터베이스를 설정하십시오 .

-- Create sample database (SQLDevBlogV6)

CREATE DATABASE SQLDevBlogV6;

GO





USE SQLDevBlogV6;



-- (1) Create Article table in the sample database

CREATE TABLE [dbo].[Article] (

[ArticleId] INT IDENTITY (1, 1) NOT NULL,

[Category] VARCHAR (50) NULL,

[Author] VARCHAR (50) NULL,

[Title] VARCHAR (150) NULL,

[Published] DATETIME2 (7) NULL,

[Notes] VARCHAR (400) NULL,

CONSTRAINT [PK_Article] PRIMARY KEY (ArticleId)

);



GO



-- (2) Populate the table with data

SET IDENTITY_INSERT [dbo].[Article] ON

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (1, N'Development', N'Atif', N'Introduction to T-SQL Programming ', N'2017-01-01 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (2, N'Testing', N'Peter', N'Database Unit Testing Fundamentals', N'2017-01-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (3, N'DLM', N'Sadaf', N'Database Lifecycle Management for beginners', N'2017-01-20 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (4, N'Development', N'Peter', N'Common Table Expressions (CTE)', N'2017-02-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (5, N'Testing', N'Sadaf', N'Manual Testing vs. Automated Testing', N'2017-03-20 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (6, N'Testing', N'Atif', N'Beyond Database Unit Testing', N'2017-11-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (7, N'Testing', N'Sadaf', N'Cross Database Unit Testing', N'2017-12-20 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (8, N'Development', N'Peter', N'SQLCMD - A Handy Utility for Developers', N'2018-01-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (9, N'Testing', N'Sadaf', N'Scripting and Testing Database for beginners ', N'2018-02-15 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (10, N'Development', N'Atif', N'Advanced Database Development Methods', N'2018-07-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (11, N'Testing', N'Sadaf', N'How to Write Unit Tests for your Database', N'2018-11-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (12, N'Development', N'Peter', N'Database Development using Modern Tools', N'2018-12-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (13, N'DLM', N'Atif', N'Designing, Developing and Deploying Database', N'2019-01-01 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (14, N'DLM', N'Peter', N'How to Apply Database Lifecycle Management', N'2019-02-10 00:00:00', NULL)

INSERT INTO [dbo].[Article] ([ArticleId], [Category], [Author], [Title], [Published], [Notes]) VALUES (15, N'Testing', N'Saqib', N'SQL Unit Testing Stored Procedures', N'2019-03-10 00:00:00', NULL)

SET IDENTITY_INSERT [dbo].[Article] OFF

문구와 단어

전체 텍스트 검색의 맥락에서 더 많은 문구와 단어를 봅시다. 이렇게하면 전체 텍스트 검색을 통해 원하는 것을 더 잘 알 수 있습니다.

 T-SQL 소개  라는 문구는 문구이며“ 소개 ”및“ T-SQL ”은 중요한 단어입니다.

SQL Server에서 전체 텍스트 검색을 구현하는 단계

전체 텍스트 검색은 다음과 같은 방식으로 구현됩니다.

  1. 전체 텍스트 인덱스를 저장하기 위해 전체 텍스트 카탈로그를 만듭니다.
  2. 테이블 또는 인덱싱 된 뷰에서 전체 텍스트 인덱스를 정의하십시오.
  3. CONTAINS 또는 FREETEXT를 사용하여 전체 텍스트 검색 쿼리를 실행하여 단어 와 구 를 찾습니다  .

전체 텍스트 카탈로그 작성

따라서 샘플 데이터베이스 (SQLDevBlogV6)가 작성되고 채워졌습니다. 전체 텍스트 카탈로그를 만드는 것이 전체 텍스트 검색을 구현하는 첫 번째 단계입니다.

SQL Server의 개체 탐색기  이동하여 데이터베이스 노드를 확장 한 다음 SQLDevBlogV6 을 클릭하십시오 .

클릭 저장을 한 후 클릭하여 전체 텍스트 카탈로그를, 다음을 클릭 새로운 전체 텍스트 카탈로그를 :

카탈로그 이름을 DevBlogCatalog 로 입력하고 확인을 클릭하십시오 .

새로 작성된 전체 텍스트 카탈로그는 다음과 같습니다.

테이블에 전체 텍스트 인덱스 정의

Articles 테이블을 마우스 오른쪽 단추로 클릭하고 전체 텍스트 인덱스 를 클릭 한 다음 아래와 같이 전체 텍스트 인덱스 정의 를 클릭 합니다.

전체 텍스트 인덱싱 마법사가 트리거됩니다. 클릭 다음 , 다음을 클릭합니다 다음을 다시 테이블에 기본 키가 마법사에 의해 미리 선택되어 있는지 확인한 뒤.

다음 단계에서 전체 텍스트 쿼리에 대한 제목 열을 선택하십시오 . 다음은 전체 텍스트 쿼리를 실행할 열입니다.

그런 다음 아래와 같이 자동 옵션 (다른 옵션을 선택하지 않는 경우)을 선택하여 변경 내용 추적을 자동화하는 기본 옵션을 선택하십시오 .

다음 단계에서는이 연습에서 앞에서 정의한 전체 텍스트 색인과 연결할 전체 텍스트 카탈로그 (DevBlogCatalog)를 선택하십시오. 그런 다음 아래와 같이 기본 옵션을 선택한 후 다음을 클릭하십시오.

클릭 다음을 하고 선택적인 단계를 건너 뛰고, 다음을 클릭합니다 마침을 전체 텍스트 색인이 성공적으로 생성 된 것을 볼 수 있습니다.

이제 전체 텍스트 검색을 활성화하여 기사 테이블  제목 열에 대해 전체 텍스트 쿼리를 실행할 수 있습니다 .

전체 텍스트 쿼리를 사용하여 단어 테스트 검색

다음 T-SQL 스크립트를 작성하여 CONTAINS 키워드 (조건 자)를 사용하여 단어를 빠르게 검색 할 수 있습니다 .

-- Search for the Word Testing using Full-Text Query

SELECT * FROM dbo.Article

WHERE CONTAINS(Title,'Testing')

제목  에서 테스트 단어 를 검색 한 결과 는 다음과 같습니다.

전체 텍스트 검색없이 Like 연산자를 사용하여 동일한 결과를 얻을 수 있습니다. 차이점은 수백만 행과 수백만 행에 대해이 쿼리를 실행할 때와 LIKE 연산자가 어려움을 겪을 때입니다. 한편 전문가에 따르면 CONTAINS는 훨씬 빠릅니다.

전체 텍스트 쿼리를 사용하여 초보자를위한 구문 검색

제목에 "초보자를위한" 이라는 문구 가 사용 된 모든 기사를 찾아 보겠습니다 . 이것은 초보자가 빨리 시작할 수 있도록 도와줍니다.

이번에는 FREETEXT 키워드 (Predicate)를 사용하고 있습니다. 다음 T-SQL 스크립트를 사용하여 초보자를위한 모든 기사를 얻을 수 있습니다.

-- Search for Phrase: for beginners using Full-Text Query

SELECT * FROM dbo.Article

WHERE FREETEXT(Title,'for beginners')

축하합니다. 전체 텍스트 검색의 기본 사항을 성공적으로 익혔습니다. 단어와 구에 대한 전체 텍스트 검색 쿼리를 설정하고 실행하는 실습 경험도 있습니다.

다음 기사에서 고급 전체 텍스트 검색 사용법을 설명하므로 계속 연락하십시오. 데이터베이스 분석 시나리오에서 종종 유용합니다.

해야 할 일

전체 텍스트 검색을 설정하고 전체 텍스트 쿼리를 실행할 수 있으므로 다음을 시도하여 기술을 향상 시키십시오.

  1. 기사에 대한 자세한 정보를 제공 하여 데이터베이스 Notes 열을 채우십시오. CONTAINS 및 FREETEXT 키워드를 사용하여 단어와 구를 검색하려면 전체 텍스트 카탈로그를 정의하고 전체 텍스트 쿼리를 실행해야합니다.
  2. 또한 단어 단위  검색 하여이 단어가 언급 된 모든 기사를 찾으십시오. 열에 단위 테스트, 단위 테스트 또는 단위 테스트로 저장 될 수 있습니다.
  3. 이 기사 의 샘플 데이터베이스를 참조하십시오 . 전체 텍스트 설정 Product 테이블을 검색 하고 열 이름 에 전체 텍스트 인덱스를 정의하고 가능한 한 많은 레코드를 추가하십시오. 원하는 단어와 구를 검색하여 원하는 제품 (이름)을 찾으십시오.

 

원본 : https://codingsight.com/implementing-full-text-search-in-sql-server-2016-for-beginners/

 

++ 한국어 설정

위의 설정대로 따라하면 한국어가 설정이 되지않아 FREETEXT가 제대로 작동하지 않는것을 확인할 수 있다.

 

1. 사용하는 데이터 베이스 - Storage - Full Text Catalogs - 상단에서만든카타로그 오른쪽클릭

2. Properties 클릭 (sql server manager를 한국어로 설정했다면 속성)

3. Tables/Views 탭 클릭

4. 해당 탭에서 하단의 Eligible columns 를 보면 이 글의 상단에서 Full-Text query를 사용할 column들이 보인다.

5. 체크한 column들의 Language for Word Breaker 가 영어로 설정되어 있을것인데 모두 Korean으로 바꿔준다.

6. ok로 설정 완료  

반응형
반응형

SQL Server의 기본 격리 수준(isolation level)은 read committed 입니다. 

그래서 데이터를 읽을 때는 공유 잠금이 유지됩니다. 그러므로, 쉽게 설명하자면 

SELECT문이 실행 중인 동안에 같은 row혹은 table에 insert나 update하는 작업은 block됩니다. 

거꾸로 같은 row, data page 혹은 테이블에 데이터를 insert, update하는 동안 SELECT문은 block되게 됩니다. 

이렇게 되면 데이터베이스 성능이 현저히 떨어지게 됩니다. 

그러므로 일반적으로 단순 조회 쿼리에는 with (nolock)문을 추가하여 사용합니다.

ex) SELECT * FROM MEMBER with (nolock)



출처: https://skymin2.tistory.com/43 [생계형 개발자]

반응형

+ Recent posts