sql在Operator中不是很好吗?

js81xvg6  于 2021-08-01  发布在  Java
关注(0)|答案(2)|浏览(316)

关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。

10个月前关门了。
改进这个问题
我在写一个用户通过测验的应用程序。所以我的目的是展示用户以前没有处理过的小测验。所以我用 SELECT id, name, problem FROM quizzes WHERE id NOT IN (...) .
想象一下,将会有成千上万的ID和测验。
可以吗?它是如何扩展的?可能我需要重新设计一些东西/使用db来达到这个目的,或者使用其他技术来达到我的目的?

f5emj3cl

f5emj3cl1#

您应该考虑到每个数据库引擎对sql语句长度的限制。虽然我还没有测试过这些极限,但在一个 IN 运算符应该仍然适用于大多数数据库,我认为如果您将其扩展到10k或更大,它可能会达到某些数据库限制,并且您的语句将崩溃。
我建议您重新考虑这个解决方案,除非您能够验证最坏的情况(使用最大参数)仍然有效。
通常,子查询可以完成这项工作,而不是手动发送1k个参数,或者通过连接字符串来组装一个大型sql语句。

svdrlsy4

svdrlsy42#

如果你有一个固定的名单,那么它应该是罚款。
如果您有子查询,那么我强烈建议 not exists :

  1. from foo f
  2. where not exists (select 1 from <bar> b where b.quiz_id = f.quiz_id)

基于 not existsnot in . not exists 手柄 NULL 价值观更直观。
也就是说,使用适当的索引,在大多数数据库中, not exists 也往往有更好的表现。

相关问题