select * from tb_aabb where id not in (20001,20002,20185,20204,20285,20738,40002,40003,40004,40005,40006,40011,40013);
tb_aabb数据量百万级,同时id总量有1500,线上数据不适合建表联表,这种的有什么解决方案么?谢过了
select * from tb_aabb where id not in (20001,20002,20185,20204,20285,20738,40002,40003,40004,40005,40006,40011,40013);
tb_aabb数据量百万级,同时id总量有1500,线上数据不适合建表联表,这种的有什么解决方案么?谢过了
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
在MySQL中,你可以使用IN运算符来查询满足条件的数据。如果你的数据量非常大,并且在线上环境中不建议创建新表,那么你可以考虑以下几种方法:
对于你的需求,可以尝试使用一个子查询来过滤出你需要的数据。
SELECT * FROM `tb_aabb`
WHERE `id` NOT IN (
SELECT `id`
FROM `tb_aabb`
WHERE `id` = '20001' OR `id` = '20002' OR `id` = '20185' OR `id` = '20204' OR `id` = '20285' OR `id` = '20738' OR `id` = '40002' OR `id` = '40003' OR `id` = '40004' OR `id` = '40005' OR `id` = '40006' OR `id` = '40011' OR `id` = '40013'
)
注意:这个SQL语句可能会影响性能,因为它会检查所有行是否包含特定ID,而不是只检查那些ID不在给定列表中的行。
另一个选择是通过CASE WHEN语句来筛选数据。
SELECT *
FROM `tb_aabb`
WHERE `id` NOT IN (
CASE WHEN `id` = '20001' THEN '20001'
WHEN `id` = '20002' THEN '20002'
WHEN `id` = '20185' THEN '20185'
WHEN `id` = '20204' THEN '20204'
WHEN `id` = '20285' THEN '20285'
WHEN `id` = '20738' THEN '20738'
WHEN `id` = '40002' THEN '40002'
WHEN `id` = '40003' THEN '40003'
WHEN `id` = '40004' THEN '40004'
WHEN `id` = '40005' THEN '40005'
WHEN `id` = '40006' THEN '40006'
WHEN `id` = '40011' THEN '40011'
WHEN `id` = '40013' THEN '40013'
END AS 'Not In List'
);
如果上述方法仍然无法解决性能问题,你还可以尝试使用EXPLAIN命令来查看查询执行计划并进行调整。
EXPLAIN ANALYZE SELECT * FROM `tb_aabb` WHERE `id` NOT IN (
SELECT `id`
FROM `tb_aabb`
WHERE `id` = '20001' OR `id` = '20002' OR `id` = '20185' OR `id` = '20204' OR `id` = '20285' OR `id` = '20738' OR `id` = '40002' OR `id` = '40003' OR `id` = '40004' OR `id` = '40005' OR `id` = '40006' OR `id` = '40011' OR `id` = '40013'
) ;
这将显示查询的执行计划,帮助你理解查询为何如此慢,然后你可以根据实际情况进行优化。
希望这些建议能帮助到你!