글쎄요. 옵티마이 저가 인덱스 선택은 카디널리티 및 술어 선택성을 비롯한 많은 요인에 의해 안내됩니다. 동일한 쿼리이지만 다른 매개 변수의 경우 옵티마이 저가 한 번 인덱스를 사용하는 실행 계획을 생성하고 다른 시간은 그렇지 않을 수 있습니다. 실제 계획을 확인해야합니다. 특정 인덱스를 사용했던 질의하는 관심이 있다면,이 역시 계획 캐시에서 발견 할 수있다, 또한
select text, cast(query_plan as xml)
from sys.dm_exec_cached_plans
cross apply sys.dm_exec_sql_text(plan_handle)
cross apply sys.dm_exec_text_query_plan(plan_handle, 0, -1)
-- add a filter on the text column to isolate the interesting queries only
:
사용, 캐시에서이 쿼리를 계획을 잡아 (캐시 된 계획의 경우에만 해당)
declare @IndexName sysname
set @IndexName = 'name_of_the_index';
with xmlnamespaces ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' as p)
select
db_name(dbid) + '.' + object_schema_name(objectid, dbid) + '.' + object_name(objectid, dbid) AS database_object
,iobj.value('@Index','sysname') AS IndexName
,qp.query_plan
,iobj.query('.') AS IndexUsage
from sys.dm_exec_cached_plans cp
cross apply sys.dm_exec_query_plan(cp.plan_handle) qp
cross apply query_plan.nodes('//p:RelOp') IndexScan(scan)
cross apply scan.nodes('//p:Object') as IndexObject(iobj)
where dbid = db_id()
and iobj.value('@Index','nvarchar(max)') = QUOTENAME(@IndexName,'[')
이 두 번째 쿼리에는 시간이 오래 걸리고 리소스가 부족할 수 있으므로주의해야합니다.
실행 계획을 보면 필요한 모든 대답이 있습니다. –
질문이 없습니다. 그들은 dinamically 생성됩니다. 나는 일반 원칙을 요구하고있다 –