SELECT * FROM RegisteredThumbnail WHERE UserId = 512315这个查询大约需要6:45分钟才能获取预期的行。
为了克服这个问题,索引是我唯一的选择吗?
通过将二进制数据替换为图像url作为字符串数据来改变图像数据的存储方式会有很大帮助吗?
但是,由于这是一个当前的操作系统,更改列并不是一个好主意。
任何想法都将不胜感激。
尚未配置任何索引。
发布于 2016-05-23 03:55:05
这个表应该在UserId上有一个聚集索引。如果每个用户只有一个缩略图,那么聚集索引可以是主键。
由于您说您在SQLServer 2012标准版上有一个当前正在运行的系统,因此在线索引构建是不可能的。您可以等待一个低活动周期来创建索引,或者创建一个新表,将数据迁移到其中,然后切换到使用新表。
理想情况下,该表应该如下所示:
CREATE TABLE RegisteredThumbnail
(
UserId INT NOT NULL,
ThumbData VARBINARY(MAX) NOT NULL,
Created DATETIME2(7) NOT NULL,
Updated DATETIME2(7) NULL,
CONSTRAINT PK_RegisteredThumbnail PRIMARY KEY CLUSTERED (UserId ASC)
)由于无法重新创建表,因此需要创建以下索引:
CREATE INDEX IX_RegisteredThumbnail_UserId
ON RegisteredThumbnail(UserID ASC)正如你在2012年的标准,这将是一个“离线”操作-它将阻止该表上的活动,而索引正在构建。考虑到它只有一百万行,构建它不需要太长时间,但是它必须扫描表才能完成,所以您将受到它读取数据的速度的限制。
发布于 2016-05-23 03:56:42
https://dba.stackexchange.com/questions/139219
复制相似问题