Sql server 为什么SQL cast很昂贵?

Sql server 为什么SQL cast很昂贵?,sql-server,casting,database-performance,Sql Server,Casting,Database Performance,我想知道这是什么背景解释?我从测试示例中看到,铸造非常耗时,但我不知道为什么,因为我不知道背后的力学原理,我想详细了解一下 我发现这是因为强制转换使用禁用了索引使用,但在下面的示例中,我们仅在查询结果中使用强制转换,而所有连接都不使用强制转换。这里的强制转换只允许我们使用distinct子句,因为它不适用于ntext列。因此,索引不应受到此影响,但与没有distinct和cast的相同查询相比,执行时间差异非常明显: select distinct cast(Table1.NtextC

我想知道这是什么背景解释?我从测试示例中看到,铸造非常耗时,但我不知道为什么,因为我不知道背后的力学原理,我想详细了解一下

我发现这是因为强制转换使用禁用了索引使用,但在下面的示例中,我们仅在查询结果中使用强制转换,而所有连接都不使用强制转换。这里的强制转换只允许我们使用distinct子句,因为它不适用于ntext列。因此,索引不应受到此影响,但与没有distinct和cast的相同查询相比,执行时间差异非常明显:

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

谢谢您的时间。

我不认为是
演员阵容花费时间,可能是
与众不同的
,因为这需要服务器检查所有Table1.NtextColumnName1值的内容,对它们进行排序并相互比较以找到唯一的值。

我不认为是
强制转换
耗时,可能是
不同的
,因为这需要服务器检查所有Table1.NtextColumnName1值的内容,对它们进行排序并相互比较,以找到唯一的值。

ntext列可能包含大量数据,这会使转换速度变慢。如果必须使用NTrice,请考虑将哈希列添加到表中,并在插入新行或更新NTBASE列时计算哈希。然后,使用散列查找不同的值。我通常不知道为什么强制转换的使用必须禁用索引的使用,而通常是在强制转换时加入(表1.column1)=table2.column2可以通过使用table2.column2上的索引进行搜索,并在通过table1行的迭代中与每个table1.column1的转换值进行比较来运行?文本列可能包含大量数据,这将使转换速度变慢。如果必须使用NTrice,请考虑将哈希列添加到表中,并在插入新行或更新NTBASE列时计算哈希。然后,使用散列查找不同的值。我通常不知道为什么强制转换使用必须禁用索引使用,而通常在强制转换时加入(table1.column1)=table2.column2可以通过使用table2.column2上的索引进行搜索,并在表1行的迭代中与每个table1.column1的强制转换值进行比较来发挥作用?