我正在使用SQL Server 2005。
我正在和我的一个朋友一起编写代码,仅举一个例子,我去左侧投了一个连接。
JOIN t on cast(a.foo as int) = b.foo
他告诉我永远不要这样做,因为我失去了索引的所有性能优势。
你为什么要故意这样做?
答案 0 :(得分:5)
嗯......答案就是你朋友所说的。如果你施放它,它将无法利用a.foo上的索引。但是如果你施放右侧,那么你将无法利用b.foo上的指数。
最后,如果您加入了不匹配的数据类型,您将不得不在某处丢失。是否应该在连接的左侧或右侧完全取决于数据密度,以及所涉及的表上实际上有哪些索引(例如,如果a.foo未被索引,那么它真的不会花费很多)。
答案 1 :(得分:0)
编写时态谓词时,例如
@test_date
属于T.start_date
限定的闭合开放时期 和T.end_date
我强烈希望在左侧找到较小的日期,就像在时间轴上的情况一样,即
WHERE T.start_date <= @test_date
AND @test_date < T.end_date
如果@test_date
涉及CAST
我最初会以同样的方式编写它。老实说,如果存在性能问题,我可能只会尝试更改它,因为过早优化会使用逻辑上合理的可读代码。