【发布时间】:2014-12-26 13:28:40
【问题描述】:
我有一个大的二维数组(576,000 X 4)和巨大的数据库(数百万条记录和 10 列,其大小以千兆字节为单位)。当然,数组比数据库中的记录数要小得多。
我需要一些有效的方法来将二维数组与数据库进行比较,并仅从二维数组中删除相等的线。
有谁知道我怎样才能有效地应用它?速度对我来说非常重要。
我试着这样应用它:
$query = mysqli_query($config, "SELECT * FROM sec ") or die(mysql_error());
while ($row = mysqli_fetch_array($query) ) {
if ( isset($arr[$row['CHROM']][$row['POS']]) ) {
// delete line from the 2D array
}
}
但是,我不知道它的效率如何,因为我只是在小型数据库上尝试过,它使我将数据库的所有记录加载到 PHP 页面中,并且会产生内存问题。
我检查的另一种方法是:
foreach ($arr as $chr=>$v) {
foreach ($v as $pos=>$val) {
$query = mysqli_query($config, "SELECT * FROM sec WHERE CHROM='$chr' && POS='$pos' ") or die(mysql_error());
if (mysqli_num_rows($query) > 0) {
// delete line from the 2D array
}
}
}
但是,这不是一个好的解决方案,因为它花费了太多时间。
编辑:
我的sec 表是这样的:
对二维数组中的项目的调用看起来像 $arr[some_CHAROM][some_POS]
如果some_CHAROM 等于数据库中的某个CHAROM AND some_POS 等于同一行中的POS,我们就有一个匹配项。
我从用户上传到网站的文件构建二维数组。而且我没有将它加载到 mySql。
【问题讨论】:
-
我认为 T-SQL 和 MySQL 是互斥的。
-
你不能用 tsql 和 MySQL 数据库,你的意思是你有一个 MSSQL(例如 SQL Server)数据库?
-
澄清一下,您正在尝试将大型数据库中的记录与二维数组中的记录进行比较,对吧?
-
@GolezTrol 很高兴知道这一点。我试图从谷歌那里得到一些想法,而 t-sql 是我在那里看到的东西之一,我一直在想这可能会起作用。
-
你的大阵列从何而来?如果这也来自数据库,那么直接在那里进行比较可能更容易