2013-12-11 112 views
1

我想知道這是什麼背景解釋?我從測試示例中看到,投射非常耗時,但我不明白爲什麼因爲我不知道後面的機制,所以我想詳細解釋它。SQL爲什麼會變得昂貴?

我發現某處這是因爲投射使用會禁用索引使用,但在下面的示例中,我們僅在查詢結果中使用了投射,而所有連接均在不投射的情況下完成。這裏的投射僅用於使我們能夠使用不同的子句,因爲它不適用於ntext列。因此,指標應該不會受到此影響,但執行的時間差是如此明顯比較相同的查詢,而無需獨特和投:

select distinct 
    cast(Table1.NtextColumnName1 as NVARCHAR(MAX)), ... 
from Table1 join Table2 on Table1.ColumnName2 = Table2.ColumnName3 
    join ... 

感謝您的時間。

+1

ntext列可能包含大量數據,這會使投射變慢。如果您必須使用ntext,請考慮向表中添加哈希列,並在插入新行或更新ntext列時計算哈希。然後,使用散列來查找不同的值。 – Dan

+0

我通常不知道爲什麼強制轉換用法將不得不禁用索引使用,當通常在cast上加入時(table1.column1)= table2.column2可以通過使用table2.column2上的索引進行搜索並與每次轉換後的值進行比較通過table1行迭代table1.column1? –

回答

1

我不認爲這是費時的CAST,它可能是DISTINCT,因爲這要求服務器檢查所有Table1.NtextColumnName1值的內容,對它們進行排序並將它們相互比較以找到獨特的價值。