PHP array_diff VS mysql NOT IN
我试图比较两个表之间的两个zipcode列,以查看第二个表中是否缺少值.
我首先想用mysql做,我的查询是这样的 'SELECT code FROM t1 WHERE t1 NOT IN (select code FROM t2)' 但它真的很慢,所以我尝试了另一种方式: 用mysql:几分钟,有时崩溃 使用PHP:不到1秒. 有人可以解释这些差异吗? 解决方法
如果主表有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的代码列,这会导致性能的大幅提升和内存消耗的减少. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |