我有一个用这个定义记录用户更改的表:
audit_trail
(
change_id int identity (1, 1) NOT NULL,
change_date datetime NOT NULL,
user_id int NOT NULL,
record_id int NOT NULL,
table_name nvarchar(50) NOT NULL,
field_name nvarchar(50) NOT NULL,
new_value ntext NULL
)
此查询在此表上运行非常慢(15分钟以上):
SELECT DISTINCT record_id
FROM audit_trail
WHERE table_name = 'jobs'
AND field_name = 'status'
AND new_value LIKE '157'
我的桌子有超过7000万条记录。这不是此表的常见查询。此表上的正常查询按日期排序或搜索日期范围内的更改,因此我在change_date
列上有一个聚簇索引。此查询的执行计划显示它正在执行聚簇索引扫描。我认为我可以通过在(table_name, field_name)
上添加非聚集索引来提高性能,但是甚至没有使用此索引。有关改进此查询性能的任何建议吗?
答案 0 :(得分:0)
如果可以这样做,将nvarchar更改为varchar将改善大小,并可能改善表的性能。我还怀疑删除不必要的“DISTINCT”将允许优化器使用其他索引。
答案 1 :(得分:0)