我有一張表(可以稱之爲「操作」),列出了由一堆不同客戶端完成的所有操作。尋找一種快速方法從大型數據庫表中獲取不同值的列表
我想獲取特定客戶端的不同操作類型的列表。 我也知道,有系統
我嘗試了明顯的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