使用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运行。查询计划应该是一样的(不确定),你将能够看到发生了什么。 –