首先,我要感谢您在页面上提供的所有帮助,这真的很有帮助。现在我遇到了一个我想不通的情况,希望你能帮助我,就是这样:
在我的工作场所,我可以访问一个包含用户(姓名、姓氏、生日和其他内容)的表的 Oracle 数据库。它有 1700 万条记录,对于每条记录,我需要生成一个唯一的键(假设它是名字的 2 个首字母加上出生日期,实际上更复杂,但它是一个例子),所以对于这个键我需要检索记录,计算键,然后用键更新记录。现在超过 1700 万条记录正在杀死服务器!
所以工作的数据库是Oracle,我把数据复制到我的机器到一个MYSQL数据库中进行测试。我打算在本地测试用php进行计算,然后创建一个java应用程序来在服务器上创建密钥,但这是一个巨大的工作量!我不知道该走哪条路。简单的选择在 php 上需要 10 分钟(在 mysql 上通过命令行需要 1.49 分钟来 COUNT() 记录)
我知道最好在记录进入时计算密钥。它们以 50 万包的形式到达,但由于我刚到这里,数据已经合并,我必须处理这些记录。
那么你会建议这个可怜的灵魂做什么来完成这样的任务。我在考虑触发器或 pl/sql,但我真的不知道在性能方面什么会更好。
非常感谢你!!!
-----------作为食人魔的请求,希望你能帮助我,这是我需要为每一行做的计算的php代码
$vn=0;//holds the value calculated for name
$sql="select * from roots";//table holding triplets for character|number (ex: 1|A|13), field names (consecutive|character|code)
$resultados=mysql_query($sql,$idcon);
while($dato=mysql_fetch_array($resultados))//i put all of the pairs in an associative array for quicker acces
{
$consulta[$dato['v_propio']]=array($dato['caracter'],$dato['v_primo']);
}
//coding the name, for every char in the name i add to $vn, the consecutive times the position of the character in the string, plus the code for the character, if null, i add some values
$pos=1;
for ($i=0;$i<strlen($nombre);$i++)
{
$char=substr($nombre,$i,1);
$char=charnum($char);
if($char!=NULL)
{
$vn=$vn+($char*$pos)+$consulta[$char][1];
}
else
$vn=$vn + 28 + 107;
$pos++;
}
//end of name coding
// i format the code for the name to 4 digits
if ( $vn < 1000 and $vn > 99 )
$vn = '0'.$vn ;
else if ( $vn < 100 and $vn > 9 )
$vn = '00'.$vn;
else if ( $vn < 10 )
$vn = '000'.$vn;
else
$vn=$vn;
//最后,我将名称中的前两个字符与计算的代码和生日 EX:JH235408071984 将来自 JHON 出生于 1984/08/07,名称代码计算为 2354
$CODE=trim(substr($nombre,0,2)).trim($vn).formatFecha($fnac);
希望它有帮助,你可以给我一些指示!