Sql 为什么使用Where in运算符时打字速度慢
我使用的是typeorm where in运算符,其中我获得每个位置的最大值(日期),在大约70个位置之后,它会在90秒后返回数据,而在sql server中只需5秒 这就是我到目前为止所得到的,这段代码可以工作,但是经过大量的不同步之后,它会减慢速度,以至于不再重新返回数据Sql 为什么使用Where in运算符时打字速度慢,sql,express,typeorm,Sql,Express,Typeorm,我使用的是typeorm where in运算符,其中我获得每个位置的最大值(日期),在大约70个位置之后,它会在90秒后返回数据,而在sql server中只需5秒 这就是我到目前为止所得到的,这段代码可以工作,但是经过大量的不同步之后,它会减慢速度,以至于不再重新返回数据 const getLastTimeIn = await getRepository(TimeInOut) .createQueryBuilder("TimeInOut") .select(["max(DateT
const getLastTimeIn = await getRepository(TimeInOut)
.createQueryBuilder("TimeInOut")
.select(["max(DateTrans) as date"])
.where("location IN (:...location)")
.setParameters({ location: unsyncLocations })
.groupBy("location")
.getRawMany();
我也尝试了循环的位置,但它似乎比上面的代码慢得多
for (let i = 0; i < unsyncLocations.length; i++) {
const element = unsyncLocations[i];
const getLastTimeIn = await getRepository(TimeInOut)
.createQueryBuilder("TimeInOut")
.select("top 1 DateTrans")
.where("location = :location")
.setParameters({ location: element })
.orderBy("DateTrans", "DESC")
.getRawMany();
console.log(getLastTimeIn);
await unsyncData.push({
id: id,
location: element,
DateTrans: this.dateFormater(getLastTimeIn[0].DateTrans)
});
id++;
}
这里是等价的查询
select Max(DateTrans) from TimeInOut where location in ('location1','location2',etc...)
输出将是
dateTrans
9/29/2019
9/29/2019
尝试分享更多的信息。代码、架构和查询都会很有帮助。@evert抱歉,我刚刚编辑完它。您还可以共享您的数据库架构吗?您好@evert谢谢您的帮助,我只是编辑了我的条目的帖子。我看不到任何索引。如果您处理的是一个相当大的数据集,索引在这里可能真的很有用。我还发现位置是字符串而不是整数这一点有点可疑,但你们可能在这里最清楚。
dateTrans
9/29/2019
9/29/2019