使用LINQ到MySQLC#LINQ MySQL查詢優化
MySQL的表定義
ID binary(16) PK
UtcTriggerTime datetime NOT NULL
PersonID binary(16) NOT NULL FK
Status int(11) NOT NULL
我有PersonIDs的(GUID)的一個陣列,並且對於每個是PersonID的我想從表中選擇符合以下條件的記錄:
UtcTriggerTime >= PREDEFINED_DATE_TIME (e.g. UtcNow - 30days)
AND
Status=1 OR Status=2
我目前是我們一個
foreach(var personID in personIDsArray){
var qryResult = (from a in AlertObjects.AlertsTriggered
where a.PersonID == personID &&
(a.Status == 1 || a.Status == 2) &&
a.UtcTriggerTime >= PREDEFINED_DATE_TIME
select a).ToArray();
}
什麼是可能的選項來優化這個性能?或者在那裏?
我試圖把一個索引上(UtcTriggerTime,是PersonID,狀態),然後用PersonIDs做一個查詢,如下所示的陣列,但它更慢,當我想到是有道理的:
var qryResult = (from a in AlertObjects.AlertsTriggered
where personIDsArray.Contains(a.PersonID) &&
(a.Status == 1 || a.Status == 2) &&
a.UtcTimeTriggered >= PREDEFINED_DATE_TIME
group a by a.PersonID into alerts
select alerts).ToArray();
謝謝你Jenea。由LINQ生成的SQL的方式太大,因爲contains子句中的ID數量太大。同樣在我的命令窗口中,它會被剪輯,儘管我猜想肯定有一種方法可以讓 – Shahid
以較少的用戶ID運行。查詢計劃應該是一樣的(不確定),你將能夠看到發生了什麼。 –