首先,我要感謝你在頁面上的所有幫助,這真的很有幫助。現在我遇到了一個我無法弄清楚的情況,我希望你能幫助我,就是這樣:Oracle/Mysql編輯大量記錄,建議?
在我的工作場所,我可以訪問一個Oracle數據庫,其中包含一個用戶名(表名姓氏,出生日期和其他東西)。它有1700萬條記錄,並且對於每條記錄我需要生成一個唯一的密鑰(可以說它是名稱的兩個第一個字母加上出生日期連接,實際上是更復雜的,但它是一個例子),所以對於我需要的這個密鑰檢索記錄,計算密鑰,然後用密鑰更新記錄。現在超過1700萬條記錄它正在殺死服務器!
因此,在工作的數據庫是甲骨文,我把數據複製到我的機器到MYSQL數據庫進行測試。我打算在本地測試使用php進行計算,然後創建一個Java應用程序來在服務器上創建密鑰,但這是一個巨大的工作量!我不知道要走哪條路。簡單的選擇需要10分鐘的PHP(在MySQL上通過命令行需要1.49分鐘COUNT()的記錄)
我知道計算鍵記錄進來時更好。它們到達包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;
做在PHP代碼//最後,我連接第一二煤焦在名稱中與計算得到的代碼和BIRTHDAY EX:JH235408071984將來自FOR JHON出生於1984年8月7日與NAME CODE計算值= 2354
$CODE=trim(substr($nombre,0,2)).trim($vn).formatFecha($fnac);
希望它可以幫助和你可以給我一些指導!
可能沒有什麼幫助,但以我的經驗(PHP + Oracle 10g2)來處理大數據,一種可能的方法是將其分成幾個相對較小的塊,更新100條記錄,更新ID 1-10,然後11-20等等。並且記得在「空閒」時間(例如晚上)做這個,並準備好聲明。 – Passerby 2013-02-20 04:56:32