JOIN B ON A.AId = B.AId or B.BDate BETWEEN @Start and @End
表A和表B的大小大致相同,并且有很多行。我认为这是因为,如果不对两个表都执行表扫描来计算or,就无法知道or的结果。and很容易被分成两个操作。我读过一些人说,可以使用UNION代替or,但如果OR中的两个条件都为真,这可能会引入重复
比方说我有 select distinct id, flavor from bageltown order by id, flavor 这是可行的。但如果我说 select distinct id, flavor from bageltown order by id, flavor='lox' desc, flavor 我得到一个错误,指出distinct当然,这是通过编辑查询来修复的,如下所示: select distinct id, flavor