문제

저는 Guid를 통해 연결된 Microsoft SQL Server 2008 환경에서 2 개의 관련 테이블로 작업하고 있습니다. 한 테이블에서 필드에는 유형이 있습니다 varchar(50), 다른 하나는 적절한 유형입니다 uniqueidentifier. 이것은 분명히 나쁘지만 레거시 소프트웨어에 의해 제공되기 때문에 지금 변경할 수 없습니다.

변환 SQL Server가 각 내부 조인에서 수행 해야하는 쿼리는 쿼리가 몹시 느려집니다. 인덱스를 전혀 사용할 수 없기 때문입니다. ID를 uniqueidentifer. 이렇게하면 인덱스를 추가하여 훨씬 빨리 실행할 수 있습니다. 나는 실패했다.

컴퓨터 열에 명시 적으로 변환 된 값을 저장할 수 있는지 아는 사람이 있습니까? 가능하다면 여기에서 사용할 공식은 무엇입니까?

건배, 마티아스

도움이 되었습니까?

해결책

이것은 나를 위해 효과가있었습니다.

CREATE TABLE t_uuid (charid VARCHAR(50) NOT NULL, uuid AS CAST(charid AS UNIQUEIDENTIFIER))

CREATE INDEX IX_uuid_uuid ON t_uuid (uuid)

INSERT
INTO    t_uuid (charid)
VALUES  (NEWID())

SELECT  *
FROM    t_uuid

다른 팁

Convert (고유 한 핵심기, your_varchar_here)

가입을 위해 전환 해야하는 빈도에 따라 CTE 데이터 유형을 변환합니다. 인라인보기보다 빠르게 구성됩니다 (다음으로 최고의 임시 옵션). 두 경우 모두 CTE/Inline View의 결과 열에서 올바른 데이터 유형으로 값을 노출시켜 연결할 수 있습니다. CTE 예 :

WITH example AS (
   SELECT t.guid
          CONVERT(UniqueIdentifier, t.guid) 'cguid'
     FROM TABLE t)
SELECT t.*
  FROM TABLE t
  JOIN example e ON e.cguid = t.guid

인라인보기 예 :

SELECT t.*
  FROM TABLE t
  JOIN (SELECT t.guid
               CONVERT(UniqueIdentifier, t.guid) 'cguid'
          FROM TABLE t) e ON e.cguid = t.guid

GUID에 대한 색인이 사용되지 않는다는 점은 사용되지 않지만 WHERE 절에서 데이터 유형 변환을 수행하는 것은 좋은 습관이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top