나는 몇 가지 코드를 다음과 같이 있습니다SqlDataReader 개체 인덱서 성능
using (var cmd = TransicsCommand.GetFleetCommand())
{
cmd.CommandText = @"
SELECT dr.DeviceId, dr.DeviceTruckRelationId, dr.TruckId, dr.RelationCreatedOn,
dl.DriverLoginId, dl.DriverId, dl.UserType, dl.LoginType, dl.SecondsSince DriverLoginCreated,
Action.ActionId, Action.ActionTimestamp, Action.UserType actionusertype, Action.TripreportId,
DeviceHeaderData.DeviceHeaderid, DeviceHeaderData.Odo, DeviceHeaderData.X, DeviceHeaderData.Y,
DeviceHeaderData.ValidPosition, DeviceHeaderData.Tfu,
DeviceHeaderData.FuelPercentage, DeviceHeaderData.Speed,
InstructionsetAction.VersionId,
tc.CouplingId, tc.TrailerId, tc.CouplingEvent, tc.TrailerEntry, tc.SecondsSince
FROM TripReport.Action Action
INNER JOIN DeviceHeader.Data DeviceHeaderData ON Action.DeviceHeaderId = DeviceHeaderData.DeviceHeaderId
INNER JOIN Instructionset.Action InstructionsetAction ON InstructionsetAction.ActionId = Action.ActionId
INNER JOIN DeviceHeader.Truck dht ON Action.DeviceHeaderId = dht.DeviceHeaderId
INNER JOIN Device.TruckRelation dr ON dht.DeviceRelationId = dr.DeviceTruckRelationId
LEFT OUTER JOIN [DeviceHeader].[LoginSession] dhls ON dhls.DeviceHeaderId = dht.DeviceHeaderId
LEFT OUTER JOIN [LogIn].DriverLogin as dl ON dhls.DriverLoginId = dl.DriverLoginId
LEFT OUTER JOIN [DeviceHeader].[TrailerCoupling] dhtc ON dhtc.DeviceHeaderId = dht.DeviceHeaderId
LEFT OUTER JOIN [Trailer].[Coupling] as tc ON dhtc.CouplingId = tc.CouplingId ";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Stopwatch sw = new Stopwatch();
sw.Start();
var trailerId = reader["TrailerId"];
sw.Stop();
Debug.WriteLine(trailerId + "-" + sw.ElapsedMilliseconds);//10s - 8s -...
}
}
}
이 코드는 40 대 걸립니다. 조금 검색 한 후, 나는 독자 [ "TrailerId"]이 전체적으로 39s를 차지한다는 것을 알았습니다. 쿼리 자체는 매우 빠르게 실행됩니다!
"TC." "TrailerId"에서 헤더는 0.6s에서 실행하게, 독자 [ "TrailerId은"] 이제 에선 0ms를 취합니다
SELECT ..., tc.CouplingId, TrailerId,...
이는 SqlDataReader 개체 인덱서 코드의 버그인가? 왜 두 번째 버전이 첫 번째 버전보다 훨씬 빨리 작동하는지 이해할 수 없습니다.
저장 프로 시저 –