Еще одна вещь, которую я нахожу полезно для решения таких проблем:
Попробуйте выполнить следующий скрипт. Он расскажет вам, какие индексы вы могли бы запросить в своей базе данных SQL Server, что сделало бы наиболее (положительное) улучшение.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SELECT TOP 100
ROUND(s.avg_total_user_cost * s.avg_user_impact * (s.user_seeks + s.user_scans),0) AS 'Total Cost',
s.avg_user_impact,
d.statement AS 'Table name',
d.equality_columns,
d.inequality_columns,
d.included_columns,
'CREATE INDEX [IndexName] ON ' + d.statement + ' ('
+ case when (d.equality_columns IS NULL OR d.inequality_columns IS NULL)
then ISNULL(d.equality_columns, '') + ISNULL(d.inequality_columns, '')
else ISNULL(d.equality_columns, '') + ', ' + ISNULL(d.inequality_columns, '')
end + ') '
+ CASE WHEN d.included_columns IS NULL THEN '' ELSE 'INCLUDE (' + d.included_columns + ')' end AS 'CREATE INDEX command'
FROM sys.dm_db_missing_index_groups g,
sys.dm_db_missing_index_group_stats s,
sys.dm_db_missing_index_details d
WHERE d.database_id = DB_ID()
AND s.group_handle = g.index_group_handle
AND d.index_handle = g.index_handle
ORDER BY [Total Cost] DESC
колонка правая отображает команду INDEX, которые вы должны выполнить, чтобы создать этот индекс CREATE.
Это один из тех спасатель сценариев, которые я бегу на наших базах в доме когда-либо так часто.
Но да, в вашем примере это, скорее всего, скажет вам, что вам нужен индекс в поле vch_PreviousEmailAddress
в вашей таблице tblEmailTransaction
.
Опубликуйте свой фактический план выполнения, и мы сможем увидеть, что уделило время. –
'WHERE t.vch_PreviousEmailAddress Like '% kala%'' ** [Условие, отличное от SARGable] (http://stackoverflow.com/a/799604/5070879) ** – lad2025