我有一张表(可以称之为“操作”),列出了由一堆不同客户端完成的所有操作。寻找一种快速方法从大型数据库表中获取不同值的列表
我想获取特定客户端的不同操作类型的列表。 我也知道,有系统
我尝试了明显的100种动作类型:
SELECT DISTINCT actionType FROM actions WHERE clientId = @clientId
但它是非常缓慢的,由于大量的表中的记录。
我现在正在使用的查询存在获得actionTypes的名单,我怀疑会更快:
SELECT 'actionType1' WHERE EXISTS (SELECT TOP 1 * FROM actions WHERE
clientId = @clientID AND actionType = 'actionType1')
UNION
SELECT 'actionType2' WHERE EXISTS (SELECT TOP 1 * FROM actions WHERE
clientId = @clientID AND actionType = 'actionType2')
UNION
.
.
.
UNION
SELECT 'actionType100' WHERE EXISTS (SELECT TOP 1 * FROM actions WHERE
clientId = @clientID AND actionType = 'actionType100')
虽然我希望这是更快(希望足够快的)感觉对我来说非常hacky 有人可以建议一个更好的方法来做到这一点?
干杯, 一个
更新: 的SELECT DISTINCT正在采取昨日下午3秒,其现在立即运行!我想知道是否有人添加了索引。我会检查
由于几个人怀疑,第二个查询实际上比明显慢得多,它需要4秒钟跑!
其实我认为这会慢得多,因为现在你做100个查询。 –
你是否有'clientId'上的索引涵盖'actionType'? – iamdave
没有集群,可能需要测试 – AidanO