現在、Microsoft SQL Server 2008 R2 のパフォーマンスの高速化に取り組んでいます。クエリを分析すると、Microsoft データベース エンジン チューニング ツールが起動して、次のクエリでインデックスを作成します。
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 サーバー 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
クエリは私が作成したものではなく、非常に複雑に見えますが、クエリを変更せずにこれを解決したいと考えています。私が最も驚いたのは、インデックスの効果がシステム間で同じではないということです。