SQL Server:你为什么要在运算符的左侧进行转换?

Cod*_*ome 0 sql t-sql casting join sql-server-2005

我正在使用SQL Server 2005.

我正在和我的一个朋友一起编写代码,仅举一个例子,我去了左侧的联接.

JOIN t on cast(a.foo as int) = b.foo
Run Code Online (Sandbox Code Playgroud)

他告诉我永远不要这样做,因为我失去了索引的所有性能优势.

你为什么要故意这样做?

Dar*_*ark 5

嗯......答案就是你朋友所说的.如果你施放它,它将无法利用a.foo上的索引.但是如果你施放右侧,那么你将无法利用b.foo上的指数.

最后,如果您加入不匹配的数据类型,您将不得不在某处丢失.是否应该在连接的左侧或右侧完全取决于数据密度,以及所涉及的表上实际上有哪些索引(例如,如果a.foo未被索引,那么它真的不会花费很多).