【发布时间】:2018-04-12 09:39:26
【问题描述】:
问题是这样的。
我需要从表User 中获取*,其中phoneNumber 列在phoneNumberArray 中。大约有 300 到 1000 个电话号码。表User 在phoneNumber 上有一个索引,可能包含数百万行。
创建一个临时表UserphoneNumbers 并插入所有电话号码并执行JOIN 或使用简单的WHERE IN 并传递一个包含1000 个电话号码的数组会更好吗?
【问题讨论】:
-
尝试它们并查看执行计划和统计信息,我猜使用临时表会更昂贵,因为它的构建和填充表
-
您能否向我们展示一个查询、一些数据或两者兼而有之?
-
如果您的查询频率较低且电话号码列表是静态的,则最好为电话号码创建临时表。但是如果电话号码列表是动态的,最好使用WHERE IN来减少建表和丢表的次数
-
我基本上会创建表只查询一次然后删除它。只有在创建新帐户时我才会这样做。我会尝试两者并测试结果
-
WHERE IN ( ... )意味着您需要通过许多数字中的任何一个来查找“用户”。这似乎是一个不太可能的用例。