2013-12-11 56 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值的内容,对它们进行排序并将它们相互比较以找到独特的价值。