我有一张这样的桌子:
CREATE TABLE peoples(
user_id int,
people_id text,
email text,
PRIMARY KEY ((user_id), people_id)
);
当我需要导入新人来检查人群而不是单独检查每一行时,这是一种好习惯吗?
这样的事情:
SELECT * FROM peoples WHERE user_id = 1 and people_id IN ('7651-ABCD', '9874-UHAG');
从服务器端我将检查它是否存在,而不是像这样查询每个人:
SELECT * FROM peoples WHERE user_id = 1 and people_id = '7651-ABCD';
我需要导入大约30-50万人,并且必须知道用户是否存在,我必须在写之前先阅读。
对IN有限制吗? IN的好习惯是多少?
我正在使用二进制协议,所以我更喜欢每次使用IN进行选择请求。
谢谢!
答案 0 :(得分:4)
要直接回答您的问题,那么通常会执行许多小查询而不是大型查询(例如,具有大量ID的IN),因为它会更均匀地分散群集周围的负载。但是根据你的群集大小等,我只是让它可配置并测试它。
但是,您可能希望非规范化以适合此查询。例如,您还可以拥有一个由人员ID键入的表格,该表格可以为您提供与之关联的用户,因此对于您导入的每个人,您可以直接查看哪些用户受到影响。基于查询的建模是正常的方式。