1

VIN を使用してバッチ ディーラー車両データを実行/処理しているときに、パフォーマンスが非常に遅いことに気付きました。いくつかのベンチマーク テストの後、T-SQL 関数を使用するLEFTとパフォーマンスが低下しますが、使用しない場合は問題なく動作することがわかりました。

T-SQL 関数を使用LEFTしないと、1 分間に平均 73 の自動車販売店を利用することになります。しかしLEFT、私は 1 分間に平均 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 に答える