php&mysql:最有效的方法来检查大型数组与数据库

问题描述:

我有一个大型的数据存储在一个多维数组中。一个例子结构如下:php&mysql:最有效的方法来检查大型数组与数据库

Array 
(
    [1] => Array 
     (
      [0] => motomummy.com 
      [1] => 1921 
      [2] => 473 
     ) 
    [4] => Array 
     (
      [0] => kneedraggers.com 
      [1] => 3051 
      [2] => 5067 
     ) 
) 

我也有一个表在MySQL数据库中currently包含〜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; 
}); 

一些伪代码甚至实际代码在这一点上会非常有帮助。

+0

所以你想要数据库中不存在的''数组''的条目? – dualed

+0

准确地说,也许我会将我的问题重新说明一点。 –

+0

为什么不直接使用'SELECT'语句 – Baba

使用DBMS!这是为了这样的东西。

  • 创建一个临时表temp {id(用数组索引填充); URL(充满URL)}

  • 与阵列的数据填充它

  • temp.url

  • 查询理想的情况下创建索引数据库:

    SELECT * FROM `temp` LEFT JOIN `urls` 
    WHERE urls.url = temp.url AND urls.url IS NULL; 
    

    (表urls是您现有的数据)