php&mysql:针对数据库检查大型数组的最有效方法
发布时间:2020-12-13 16:19:59 所属栏目:PHP教程 来源:网络整理
导读:我有一大堆数据存储在一个多维数组中.示例结构如下: Array( [1] = Array ( [0] = motomummy.com [1] = 1921 [2] = 473 ) [4] = Array ( [0] = kneedraggers.com [1] = 3051 [2] = 5067 )) 我在mysql数据库中也有一个表,目前包含~80K域名.该列表每月可能会增
我有一大堆数据存储在一个多维数组中.示例结构如下:
Array ( [1] => Array ( [0] => motomummy.com [1] => 1921 [2] => 473 ) [4] => Array ( [0] => kneedraggers.com [1] => 3051 [2] => 5067 ) ) 我在mysql数据库中也有一个表,目前包含~80K域名.该列表每月可能会增加~10K域名.目标是将Array [] [0](域名)与mysql数据库进行比较,并返回一个仅包含唯一值的保留值(但密钥保存并不重要)的数组. 请注意,我只想比较第一个索引,而不是整个数组. 假设初始多维阵列的大小很大(超过10万到1000万个结果的可能性).获取未包含在数据库中的数据的最佳方法是什么? 我现在正在做的只是将数据存储到数组中,从数据库中获取完整的域列表,然后使用以下函数,将初始数组中的每个值与数据库数组进行比较.这显然是非常缓慢和低效的. // get result of custom comparison function $clean = array_filter($INITIAL_LIST,function($elem) { $wordOkay = true; // check every word in "filter from database" list,store it only if not in list foreach ($this->domains as $domain) { if (stripos($elem[0],$domain) !== false) { $wordOkay = false; break; } } return $wordOkay; }); 在这一点上,一些伪代码甚至实际代码将非常有用. 解决方法
使用DBMS!这是为了这样的东西.
>创建临时表temp {id(填充数组索引);网址(填充网址)} SELECT * FROM `temp` LEFT JOIN `urls` WHERE urls.url = temp.url AND urls.url IS NULL; (表格网址是您现有的数据) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |