首頁 >資料庫 >mysql教程 >如何解決參數嗅探導致的 EF 6 查詢逾時?

如何解決參數嗅探導致的 EF 6 查詢逾時?

Barbara Streisand
Barbara Streisand原創
2024-12-22 14:13:12892瀏覽

How Can I Resolve EF 6 Query Timeouts Caused by Parameter Sniffing?

EF 6 參數嗅探和「選項重新編譯」提示

儘管 SSMS 中的 SQL 高效,但您的 EF 6 查詢超時問題建議參數嗅探。要解決此問題,請考慮以下事項:

EF 可以嵌入「OPTION RECOMPILE」提示嗎?

是的,EF 6 允許在執行之前攔截 SQL 指令。您可以透過實作 IDbCommandInterceptor 新增「OPTION RECOMPILE」提示。以下是一個範例實作:

public class OptionRecompileHintDbCommandInterceptor : IDbCommandInterceptor
{
    public void AddQueryHint(IDbCommand command)
    {
        if (command.CommandType != CommandType.Text || !(command is SqlCommand))
            return;

        if (command.CommandText.StartsWith("select", StringComparison.OrdinalIgnoreCase) && !command.CommandText.Contains("option(recompile)"))
        {
            command.CommandText = command.CommandText + " option(recompile)";
        }
    }

    // Implementation of other interface methods...
}

要使用此攔截器,只需在開始時將其添加到您的應用程式中即可:

DbInterception.Add(new OptionRecompileHintDbCommandInterceptor());

更多注意事項

  • 確保表統計資訊是最新的,因為它們會影響參數嗅探。
  • 考慮使用 WithCompileOptions(new QueryCompilationContext()) 強制重新編譯查詢。
  • 如果查詢極為複雜,請嘗試透過手動調優或使用查詢提示來最佳化它。

以上是如何解決參數嗅探導致的 EF 6 查詢逾時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn