如何无需遍历数组从account表查询并拉取多个邮箱对应的用户数据
无需遍历数组的最优查询方案
前置优化(必做,否则查询效率会很差)
首先给account表的email字段加唯一索引,邮箱本身具有唯一性,索引可以把查询复杂度降到对数级别,1000个邮箱的批量查询几乎无延迟:
ALTER TABLE account ADD UNIQUE INDEX idx_account_email (email);
具体实现
直接将你手里的邮箱数组全部填入SQL的IN子句,执行单条查询即可,全程不需要遍历数组做单次查询:
SELECT email, first_name, last_name FROM account WHERE email IN ('a@a.com', 'b@b.com', ...此处替换为你的所有邮箱元素...);
补充说明
- 主流数据库(MySQL、PostgreSQL等)的
IN子句默认都支持千级别的元素长度,1000个邮箱完全不需要拆分,也不会触发性能问题 - 该方案只需要1次数据库交互,比遍历数组逐次查询减少了999次网络IO开销,性能提升至少两个数量级
- 返回的结果就是所有存在于表中的邮箱对应的姓名字段,你直接拿查询结果和原数组做比对就能筛选出不存在的邮箱
内容的提问来源于stack exchange,提问作者Eric Cheon
相关产品推荐
相关产品推荐

