我目前正在努力提高 Microsoft SQL Server 2008 R2 的性能。在分析查询时,Microsoft Database Engine Tuning Tool 会使用此查询创建索引:
CREATE NONCLUSTERED INDEX [samplelocation1] ON [dbo].[sample_location]
(
[sample_id] ASC,
[sample_code] ASC
) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
这将使用从备份恢复的数据库在测试服务器(运行相同版本的 SQL Server,2008 R2)上执行查询的时间从 17 秒缩短到 5 秒。
然而,在生产服务器上,执行时间从 17 秒增加到 1 分 40 秒。这是怎么回事?
查询:
select *
from sample_view
where version_date >= '<date>'
and version_date - 0.9999999 <= '<date>'
and (cus_id in (select company_id
from company_emp_relation_view
where user_id = '<userid>')
or
fac_id in (select company_id
from company_emp_relation_view
where user_id = '<userid>'))
and sample_code in (select min(sample_code)
from sample_location
group by sample_id)
and (rfq_status<>'I')
and location <> 'D'
order by
version_date desc
该查询不是我编写的,看起来过于复杂,但我想在不更改任何查询的情况下解决这个问题。我最大的惊喜是索引的效果在不同系统之间是不一样的。