まず最初に、このページでお世話になったことに感謝したいと思います。本当に役に立ちました。今、私は理解できない状況に遭遇しました。あなたが私を助けてくれることを願っています.これはそれです:
私の職場では、ユーザー (名前、姓、生年月日など) で満たされたテーブルを持つ Oracle DB にアクセスできます。1700 万のレコードがあり、レコードごとに一意のキーを生成する必要があります (名前の最初の 2 文字と生年月日を連結したものであるとしましょう。実際にはもっと複雑ですが、例です)。レコードを取得するには、キーを計算し、そのキーでレコードを更新します。現在、1,700 万件を超えるレコードでサーバーが停止しています。
したがって、作業中のDBはOracleです。テストのために、マシンのデータをMYSQLデータベースにコピーしました。phpで計算をローカルでテストしてから、Javaアプリケーションを作成してサーバー上でキーを作成する予定でしたが、それは膨大な作業負荷です!! どちらに行けばいいのかわからない。単純な選択はphpで10分かかります(コマンドライン経由のmysqlでは、レコードをCOUNT()するのに1.49分かかります)
レコードが入ってきたらキーを計算したほうがよいことはわかっています。それらは 500k のパッケージで届きますが、ここに来たばかりなので、データはすでにマージされており、これらのレコードで作業する必要があります。
では、この可哀想な魂に、そのような仕事について何をするよう勧めますか? トリガーまたは pl/sql を考えていましたが、パフォーマンスの点で何が良いか本当に迷っています。
どうもありがとうございました!!!
-----------鬼からのリクエストとして、あなたが私を助けてくれることを願っています.
$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;
//最後に、名前の最初の 2 文字を、計算されたコードと誕生日を連結します。例: JH235408071984 は、1984 年 8 月 7 日に生まれた JHON の名前コード計算 = 2354 に由来します。
$CODE=trim(substr($nombre,0,2)).trim($vn).formatFecha($fnac);
それが役に立てば幸いです、そしてあなたは私にいくつかのポイントを与えることができます!!