【发布时间】:2019-08-28 13:41:10
【问题描述】:
我有一个包含两列的表,一个 ID 和一个序列号。让我们将此表称为vehicle。序列号用于自动完成文本框。现在,我只是用 contains/like 语句缩小列表并选择前 5 个匹配项。显然,这会返回 5 个最旧的记录。
这些车辆条目由另一个表通过外键引用。让我们称之为appearence。为了改善用户体验,我想展示过去三个月中出现频率最高的五辆汽车。
一个简单的方法是,简单地将两个表连接在一起,按序号分组,统计指定时间范围内出现的次数,最后按该次数降序排列。
问题是,这个自动完成的文本框被访问得比较频繁,所以我想知道,是否有针对这个的内置优化。我的第一个想法是,创建一个日常工作,更新一个新的probability 列并按该列排序。我还看到了 SQL Server Management Studio 中的统计选项,我想知道这是否对我有帮助。还是有办法为此使用视图?
每天更新订单会很丰富。
这是 select 语句(还没有时间组件):
SELECT RegistrationNumber, count(lbt.ID) as cnt
FROM [Trailer] t
INNER JOIN [LoadingBay_Trailer] lbt ON t.ID = lbt.ID_Trailer
group by t.RegistrationNumber
order by cnt desc
【问题讨论】:
-
您可以向我们提供样本数据和预期结果吗?请不要使用图片 - 我们需要实际数据...
-
只是查询表太慢了吗?就目前而言,这个问题无法回答,因为它缺乏任何细节。
-
请参阅 How to post a T-SQL question on a public forum 以获取为该问题添加必要细节的提示和工具。
-
@Birel 我已经编辑了我的帖子并添加了 SQL 语句。
-
@SeanLange 这并不慢。但它会在(共享)服务器上产生负载。而且这个软件有很多用户。