почему TypeOrm медленно при использовании Where в операторе - PullRequest
0 голосов
/ 28 сентября 2019

Я использую typeorm, где в операторах, где я получаю максимум (дату) для каждого местоположения и после примерно 70 местоположений, он возвращает данные через 90 секунд, где в SQL Server занимает всего 5 секунд.

этоэто то, что я получил до сих пор, этот код работает, но после большого количества несинхронизаций он замедляется до такой степени, что он больше не будет перезаписывать данные.выше

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++;
}

это сущность для timeinout

@Entity("TimeInOut")
export class TimeInOut {
  @PrimaryColumn("int")
  ID: number;
  @Column("datetime")
  DateTrans: string;
  @Column("int")
  Attrib1: string;
  @Column("varchar", { length: 30 })
  Attrib2: string;
  @Column("int")
  Attrib3: string;
  @Column("int")
  Attrib4: string;
  @Column("int")
  IsSync: string;
  @Column("varchar", { length: 100 })
  location: string;
  @Column("datetime")
  timeStampLog: string;
  @Column("varchar", { length: 500 })
  CompanyId: string;
  @Column("varchar", { length: 500 })
  sourcelocation: string;
}

вот эквивалентный запрос

select Max(DateTrans)  from TimeInOut where location in ('location1','location2',etc...)

на выходе будет

dateTrans 
9/29/2019
9/29/2019
...