2017-03-08 96 views
0

我競選對手的Azure的SQL數據庫查詢...Azure的SQL查詢性能問題

select Id 
from Table1 
    WHERE ([Table1].[CustomFieldString2] IS NULL) AND 
     (N'New' = [Table1].[CustomFieldString7]) AND (0 = [Table1].[Deleted]) 

該查詢運行速度快大約300毫秒......

只要我添加另一列我的選擇(布爾)在

Select Id, IsActive 

我的查詢是超級慢(分鐘)

這沒有任何意義...

當時如果有人知道這可能是

+0

不是很多去這裏。過濾器中的字段是否有索引?如果是這樣,那麼SQL Azure不需要去數據庫中獲取第一個查詢中的id,因爲它是主鍵,而索引本身會擁有該值的副本。 – MikeS

+0

請解釋什麼是N'New' – scaisEdge

+1

N'New'使'新'字面屏幕成爲unicode字符串而不是ASCII字符串 – MikeS

回答

0

總之,當你添加不屬於索引到select那麼SQL不能選擇相同的執行計劃的一部分列疑惑。

如果SQL估計行數較少,那麼它將選擇在執行計劃中使用嵌套查找。如果估算錯誤,這可能需要更多時間。

如果有更多的行或密鑰查找開銷超過某個閾值,SQL可能會決定對錶進行掃描可能更有效。

如果查詢性能不可接受,則嘗試將isactive添加到包含的列列表中。

-2

您查詢的結構當然很重要,但Azure自然很慢。是使用雲系統,所以它不是那麼快(我假設使用免費版本)。我沒有看到任何人對天青速度的樂趣。 (低價)