PHP array_diff VS mysql NOT IN

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP array_diff VS mysql NOT IN脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图比较两个表之间的两个zipcode列,以查看第二个表中是否缺少值.

我首先想用mysql做,我的查询是这样的

'SELECT code FROM t1 WHERE t1 NOT IN (select code FROM t2)'

但它真的很慢,所以我尝试了另一种方式:
我做了两个select,然后将结果与array_diff()进行了比较.

MysqL:几分钟,有时崩溃

使用PHP:不到1秒.

有人可以解释这些差异吗?
我的SQL查询错了吗?

解决方法

如果主表有50k行,则在查询中使用子选择将导致1个50k的选择执行.一个用于第一个表,50k选择,每行一个.服务器将该行与每次迭代主表时重新加载的子选择进行比较.这就是你的sql代码花费时间的原因,它也可能是一个巨大的内存问题.

请参阅serjoschas有关联接的信息以在sql中修复它,它应该比你的PHP解决方案更快.

一个解决方案:

SELECT code FROM t1
WHERE code NOT IN ( SELECT code FROM t2 )

将会:

SELECT t1.code 
FROM t1
LEFT JOIN t2
ON t1.code = t2.code
WHERE t2.code is null

试试.另请参阅索引,如Cyclone所示:

索引可加快查询速度.如果表只提供一列,则搜索与源表具有相同内容的索引表将完全相同且冗余.否则,我强烈建议索引t2的代码列,这会导致性能的大幅提升和内存消耗的减少.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP array_diff VS mysql NOT IN全部内容,希望文章能够帮你解决PHP array_diff VS mysql NOT IN所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: