簡體   English   中英

SQL SERVER - 執行計划

[英]SQL SERVER - Execution plan

我在兩個數據庫中都有一個VIEW。 在一個數據庫中,運行時間不到1秒,但在另一個數據庫中運行1分鍾或更長時間。 我檢查索引,一切都是一樣的。 行數之間的差異低於每個其他數據庫的1000萬行。

我檢查de exectuion計划,我發現的是,需要更多時間的數據庫,我有3個哈希匹配(1個聚合和2個右外連接),在查詢批處理中可以100%響應。 在另一個數據庫中,我在執行計划中沒有這個。

誰能告訴我在哪里可以開始搜索問題?

謝謝,抱歉英文不好。

您可以在此處查看此鏈接,以獲取有關不同類型連接的快速說明。

基本上,根據您提供給我們的信息,以下是可能出錯的一些替代方案:

  1. 一個DB有索引,另一個沒有。
  2. 一個DB中的一些連接表之間的大小差異超過另一個DB,這足以改變所使用的連接類型。
  3. 雖然您的索引在兩個數據庫表組中可能是相同的,但正如您所說的那樣......其他數據庫可能已經過時/壞的統計信息或過多的索引碎片,導致計划次優。

編輯:

關於下面的評論,重建索引與刪除和重新創建索引類似。 由於創建索引還會為這些索引創建統計信息,因此重建也會處理這些索引。 但有時這還不夠。

雖然官方默認統計數據應該以實際數據的約20%采樣率構建,但實際上采樣率可以低至幾個百分點,具體取決於表格的大小。 它很少接近20%。 因此,許多DBA使用FULLSCAN手動構建統計數據以獲得100%的采樣率。

統計數據在任何一種方式都需要相同的存儲空間,因此除了維護計划所需的額外時間之外,實際上沒有任何缺點。 在我目前的項目中,我們有幾種情況,統計數據的默認采樣率不夠,並且仍會產生錯誤的計划。 所以我們每隔幾周就會定期用FULLSCAN更新所有統計數據,以確保性能保持一流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM