2009-04-21 2 views
0

SQL Server가 문자열을 비교하고 구문을 검색하는 방법에 대한 정보가 있습니까? 얼마나 큰 문자열로 정보를 저장하고 SQL 서버를 사용하여 일치하는 항목을 결정하기 위해 행을 비교할 것인지를 결정하는 방법이 있는지 알아 내려고합니다. 나는 이것이 잠재적으로 천천히 진행될 것이라는 것을 안다. (정보의 각 문자열은 2400 자일 것이다.) 문자열의 비교 방법을 알 필요가있다. 그래서 그것의 효율성 (또는 비 효율성)을 보여줄 수있다.Sql Server String Comparison

+0

1. 전체 텍스트 색인을 계획하고 있습니까? 2.이 유형의 솔루션을 사용해 본 적이 있습니까? 3. 어떤 종류의 데이터를 작업 할 예정입니까? 일반적으로 LIKE 문은 사용하지 마십시오. 이 게시물은 동적 SQL이 전체 텍스트 인덱스보다 좋을 수도 있음을 나타냅니다. http://social.msdn.microsoft.co.kr/forums/ko-US/sqldatabaseengine/thread/c8734672-837d-4e63-92e4-76c58a368251/ –

+0

같은 점이 무엇입니까? Where 'Smi %'와 같은 성은 sargable이고 WHERE LEFT (LastName, 3) = 'Smi'가 아닙니다 .... 열의 시작 부분을 검색 할 때와 같은 문제는 전혀 없습니다. – SQLMenace

+0

like 문은 필드 중간에서 400 자 긴 문자열을 검색 할 때 잘 수행되지 않습니다. – kemiller2002

답변

2

정보의 각 문자열은

정확히 2,400 2,400 자 있을까요? 그래서 거기에 고정 폭 필드가 있습니까? 시간을 절약하고 별도의 열로 나눕니다. 나중에 고맙다.

에 데이터가있는 경우에 데이터가 있으면 테스트 데이터베이스를 설정하고 두 가지 방법으로 시도하십시오. 그러면 적어도 시스템의 시스템에만 해당되는 데이터가 제공됩니다.

+0

데이터의 특성상 그렇게 할 수 없습니다. 나는 그 접근법에 대해 생각했지만 데이터의 전반적인 가치를 결정하기 위해 많은 수의 연결을해야했습니다. 2400은 근본적으로 일련의 일련의 플래그를 찾기 위해 검색해야하는 많은 플래그 세트입니다. 정말로 내가 찾고있는 것은 이것을하기에 정말 비효율적이라고하는 정보입니다. – kemiller2002

+0

나는 (삽입하지 말 것) 삽입에 문자열을 분할하는 것이 검색이나 검색에서 그것을 분리하는 것보다 훨씬 빠르다는 것을 알게 될 것이다. 데이터베이스 설계의 기본 규칙 : 1 열, 1 값. –

+0

여기 거래가 있습니다. dba는 각 문자가 1 분의 시간을 나타 내기를 원합니다. 사용 가능한 시간 범위가 얼마나되는지를 결정하기 위해 검색해야합니다. 그것을 분할하는 것은 시간의 길이가 어느 정도인지 파악할 수있는 값을 결정하는 많은 양의 작업을해야한다는 것을 의미합니다. 나는 당신이 틀렸다는 것을 말하지는 않지만, 왜 이것이 나쁜 생각인지 보여주는 충분한 정보입니다. 문제에 접근하기 위해 다른 데이터 구조를 염두에두고 있지만 내 생각을 제시하기 전에 그의 아이디어를 논박해야합니다. – kemiller2002

0

당신은/넓은 인덱스가 900 바이트가 될 수 없기 때문에 인덱스를 만들 수 없습니다 때문에 검색 창에서 검색하면 느려질 수

나는 조엘 Coehoorn이 제안하고로를 분할 무엇을 할 것

당신은 또한 당신은 단지 3 행은 행 당 2400 개 문자로 페이지를 홍보 저장할 수 있기 때문에 더 테이블을 분할 할 수 있습니다

당신은 SQL Server에 적용 할 수있는 전체 텍스트 검색 인덱스가있다
0

종종 검색 엔진과 같은 것들에 사용됩니다. 전체 텍스트 인덱스는 일반적으로 검색을위한 부울 논리 연산자를 허용합니다.

+0

나는 SQL을 사용하는 사람을 개인적으로 알지 못합니다. 검색 엔진 백엔드로 서버 전체 텍스트 색인. 어떤 예를 알고 있습니까? 내가 알고있는 대부분의 구현은 Lucene 또는 텍스트 검색 구현을위한 사용자 정의 코드를 사용합니다. –

+0

StackOverflow가이를 사용합니다. –

0

이미 언급 한 내용에 대한 추가 정보. like를 사용하여 큰 문자열을 필터링해야하는 경우 인덱스도 사용되지 않습니다 (와일드 카드 %는 검색 문자열의 끝 부분에만 있습니다). 따라서 자신의 분야에서 사용할 수 있도록 필터링해야하는 부분을 없애고 만드는 것이 가장 좋습니다.

0

MSDN 전체 텍스트 검색에 대한 기사에서는 LIKE 조건자가 문자 패턴을 사용하는 방법에 대해 다음과 같이 설명합니다.

전체 텍스트 검색과는 대조적으로 전체 텍스트 검색

에 LIKE 비교는 LIKE 거래-SQL 술어는 문자 패턴에서만 작동합니다. 또한 쿼리 형식의 이진 데이터에 LIKE 조건자를 사용할 수 없습니다. 또한 크기의 구조화되지 않은 텍스트 데이터에 대한 LIKE 쿼리는 동일한 데이터에 대한 전체 텍스트 쿼리보다 훨씬 느립니다. 텍스트 데이터 행의 수백만에 대한 LIKE 쿼리는 반환하는 데 몇 분이 걸릴 수 있습니다. 전체 텍스트는 동일한 데이터에 대해 초 이하를 취할 수 있으며 반환되는 행 수는 입니다.