我使用InnoDB和MySQL
嗨,
我有两张桌子: 第一个称为adtells,包含很少的元素,很少更新。 第二个包含很多元素,并在常规基础上获得新的插入。
第二个表存储,哪个用户隐藏了第一个表中的元素。我想我无法加入这些表格。
我的第一个查询是这样的: SELECT xy FROM firstTable WHERE 1 NOT IN(SELECT abc FROM secondTable)
我的第二种方法是两个查询: 第一个选择第二个表中所有需要的元素。通过这些结果,我访问了第一个表。
您对这些方法有何看法?第一个或第二个是更高效的还是你还有其他想法吗?
对给定示例的进一步说明: 表格1: id |内容 表2: userId,tableOneId
第二个表包含从给定用户到第一个表的元素的赋值。如果存在分配,则上述查询不应检索受影响的tableOneId。
很想收到你的消息!
答案 0 :(得分:1)
使用NOT EXISTS
SELECT t1.* FROM firstTable T1
WHERE
NOT EXISTS
(SELECT 1 FROM secondTable T2 where t2.id = t1.id)
NOT EXISTS / EXISTS将在找到第一个匹配时终止
IN将搜索所有行,无论匹配多少...如果有100个匹配则再进行100次迭代。
基于规则优化器:
当子查询结果非常好时,EXISTS比IN快得多 大。当子查询结果非常好时,IN比EXISTS快 小。基于成本优化器:
没有区别。