1

在使用 VIN 执行/处理批量经销商车辆数据时,我注意到性能非常缓慢。经过一些基准测试,我发现如果我使用 T-SQL 函数LEFT,性能会受到影响,但如果我不使用它,它可以正常工作。

如果没有 T-SQL 函数LEFT,我最终平均每分钟有 73 个汽车经销商。但是LEFT,我最终平均每分钟有 5 或 6 个汽车经销商。

那么问题是什么,我的解决方法是什么?谢谢。

using (var dbConnection = new SqlConnection(this._dbConnectionString))
{
    using (var dbCommand = dbConnection.CreateCommand())
    {
        sqlAsk = "";
        sqlAsk += " SELECT Year, Make, Model, Style AS Trim, Squish_Vin AS SquishVin, '' AS VehicleId FROM ED_SQUISH_VIN_V3_90 ";
        //@@sqlAsk += " WHERE @parmVehicleSquishVin = Squish_VIN ";
        sqlAsk += " WHERE @parmVehicleSquishVin LIKE LEFT(Squish_VIN, 9) ";

        dbCommand.CommandText = sqlAsk;
        dbCommand.Parameters.Clear();
        dbCommand.Parameters.Add("@parmVehicleSquishVin", SqlDbType.VarChar, 10, "Squish_VIN").Value = squishVin;

        if (dbConnection.State == ConnectionState.Open) { dbConnection.Close(); }

        dbConnection.Open();

        using (var dbReader = dbCommand.ExecuteReader())
        {
        }
    }
}
4

1 回答 1

3

当您在 where 子句中的列上使用函数时,该列上的任何索引都不会生效,这意味着该索引没有用处。您可以稍微不同地编写查询以删除 LEFT 的使用,例如

  sqlAsk += " SELECT Year, Make, Model, Style AS Trim, Squish_Vin AS SquishVin, '' AS VehicleId FROM ED_SQUISH_VIN_V3_90 ";
        //@@sqlAsk += " WHERE @parmVehicleSquishVin = Squish_VIN ";
        sqlAsk += " WHERE Squish_VIN like '"+squishVin+"%'";

此查询应给出完全相同的结果,但不使用 LEFT 函数。在这种情况下,您不需要使用任何参数

于 2013-08-07T19:50:35.627 回答