index_id <256000의 의미는 무엇입니까?


11

특정 튜토리얼에서 저자가 sys.indexes술어를 기준으로 필터링한다는 것을 읽었습니다 index_id < 256000. 이것이 무엇을 달성합니까?


2
아마 그들은 코드를 복사했을 것입니다sys.sysindexkeys
Martin Smith

1
@ 마틴 오, ck.
Aaron Bertrand

1
@AaronBertrand -도에서 sys.selective_xml_index_paths, sys.xml_indexes, sys.sysindexes하지만 난 마법 번호가 더 이상 유효하지 경우이 바로 업데이트되지 얻을 것 같아요.
Martin Smith

1
@Martin 나는 그것에 내기하지 않을 것입니다. 특히 이전 버전과의 호환성보기에 적합합니다. 메타 데이터를 검색하는 방법을 보여주는 끔찍한 방법 ...
Aaron Bertrand

답변:


17

이것은 XML 인덱스가 현재 적어도 256,000 이상인 id 체계를 가질 수있는 유일한 유형이라는 오해에 기초하고 있습니다 (적어도 그들의 관찰에 근거하여이 체계는 AFAIK에 문서화되어 있지 않으므로 의도적인지 확실하지 않습니다). 현재 버전에서는 아마 좋을지 모르지만 다음에 어떤 유형의 색인이 추가 될 것이며 누가 ID 체계가 시작 될지 누가 알 수 있습니까? XML 인덱스를 제외하려면 다른 항목도 제외하십시오. 예를 들어 공간 인덱스는 id = 384000에서 시작하는 것으로 보입니다. 위 쿼리에 XML 인덱스가 아닌 공간 인덱스를 포함하려는 경우 놀라 울 것입니다.

훨씬 더 나은 필터는 다음과 같습니다.

WHERE type <> 3;

... 또는 자체 문서화 기능이 있기 때문에 더 좋습니다 ...

WHERE type_desc <> N'XML';

그리고 이제 공간 인덱스를 제외하고 싶다면 쿼리가 다음으로 변경됩니다.

WHERE type_desc NOT IN (N'XML', N'SPATIAL');

... 공간 인덱스의 id 값이 차지하는 숫자 범위를 알아 내야하는 대신. 좋은 성과 있길 바래요.

이것들은 sys.indexes (Transact-SQL) 에 명확하게 문서화되어 있습니다. 나는이 마법 번호에 대한 언급이 없으며,이 저자가이 마법 번호가 의존해야하는 것이 아님을 알 수 있도록 여기에 튜토리얼 작성자를 적극 추천합니다.


4
+1 끔찍한 나쁜 습관입니다. 에 대해 잊어 버리십시오 index_id. 특히 유형을 결정하기위한보다 정확한 데이터가 바로 옆에 앉아 있기 때문에 ... 문자 그대로.
Thomas Stringer

1
이 규칙 성과 함께 index_id를 제공하는 것은 SQL Server의 디자인 오류 일 것입니다. 아무도 실수로 의지 할 수 없도록 무작위 화해야합니다.
usr

1

"Microsoft SQL Server 2012 Internals"책에 따르면 Craig Freeman 인 Kalen Delaney에 따르면 XML 인덱스의 index_id는 256000으로 번호가 매겨지기 시작합니다. 따라서 모든 유형 인덱스 정보 (sys.indexes 쿼리)를 가져 오지만 XML 인덱스를 건너 뛰면 필터를 배치 할 수 있습니다.

SELECT * FROM sys.indexes WHERE index_id <256000

sys.indexes의 유형 열에 필터를 배치하면 동일한 결과 집합을 얻을 수 있습니다. XML 유형의 인덱스 유형은 3입니다.

SELECT * FROM sys.indexes WHERE type <> 3

또는

type_desc 열도 사용할 수 있습니다.

SELECT * FROM sys.indexes WHERE type_desc <> 'XML'

1
이 주장에 대한 공식적인 문서가 있습니까?
swasheck

여기 있어요 어느 페이지? 또한-나는 그 저자의 도대체를 존중하지만 그것이 "공식 문서"로 간주되는지 확실하지 않습니다.
swasheck December

Kalen은 특정 시점에서 이것이 실제로 의도적 인 것이라는 사실을 알지 못하고, 새로운 인덱스 유형이 미래에 256000 이상인지 여부를 결정할 미래의 능력을 전혀 신경 쓰지 않습니다. Microsoft가 귀하가 의지하려는 의도가 아니기 때문에 공식 문서에서 이에 대한 언급을 찾을 수 없습니다. 그리고 @swasheck에 동의하십시오. 그 책은 확실히 귀중한 자료이지만 공식적인 문서는 아닙니다.
Aaron Bertrand

3
@ swasheck 질문은 왜 그림 256000이 사용되고 안전한지가 아니라는 것입니다. 모범 사례를 들어 확실히 나는 아론과 함께 가고 싶습니다
aasim.abdullah

1
"이것은 무엇을 달성합니까?" 기술적으로 대답은 "아무것도 아닙니다". 우연히, 사람들이 XML 인덱스 필터링을 서로 연관시키는 방법입니다.
swasheck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.