什么是最佳的?UNION与WHERE IN(str1,str2,str3)

Sha*_*awn 6 sql optimization

我正在编写一个程序,在客户特定的当地时间发送电子邮件.我有一个.NET方法,它采用时区和时间和目的地时区,并返回该时区的时间.因此,我的方法是选择数据库中的每个不同时区,使用该方法检查是否是正确的时间,然后使用该时区选择数据库中的每个客户端.

查询将看起来像其中之一.请记住,结果集的顺序无关紧要,因此联合会没问题.哪个运行得更快,还是他们真的做同样的事情?

SELECT email FROM tClient WHERE timezoneID in (1, 4, 9)
Run Code Online (Sandbox Code Playgroud)

要么

SELECT email FROM tClient WHERE timezoneID = 1
    UNION ALL SELECT email FROM tClient WHERE timezoneID = 4
    UNION ALL SELECT email FROM tCLIENT WHERE timezoneID = 9
Run Code Online (Sandbox Code Playgroud)

编辑:timezoneID是tTimezone的外键,tTimezone是一个具有主键timezoneID和varchar(20)字段timezoneName的表. 此外,我去了,WHERE IN因为我不想打开分析仪.

编辑2:查询在100毫秒内处理200k行,所以此时我已经完成了.

Jak*_*urc 3

嘿!这些查询并不等同。

仅当假设一封电子邮件仅属于一个时区时,结果才会相同。当然它确实如此,但 SQL 引擎不知道这一点并试图消除重复。所以第一个查询应该更快。

始终使用 UNION ALL,除非您知道为什么要使用 UNION。

如果您不确定有什么区别,请参阅这个问题。

注意:那声喊叫属于问题的先前版本