I have a code like this:
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);
This code takes 40 seconds. After some searching, I found out that the reader ["TrailerId"] rule takes 39 seconds, the request itself is very fast!
Delete "TC". the header from "TrailerId" will start it in 0.6 s, the reader ["TrailerId"] now only accepts 0ms:
SELECT ..., tc.CouplingId, TrailerId,...
Is this an error in the sqldatareader index code? I canβt understand why the second version is much faster than the first.