هل هناك طريقة سريعة لتحديث العديد من السجلات في SQL؟

StackOverflow https://stackoverflow.com/questions/1437260

سؤال

وأنا بحاجة إلى استبدال أكثر من 20 000 أسماء مع أسماء جديدة خلقت نظرا لCodeID.

وعلى سبيل المثال: لا بد لي من تحديث كافة الصفوف التي تحتوي على "كلب" (التي لديها CodeID 1) مع "القط"، وتحديث كافة الصفوف التي تحتوي على "الحصان" (التي لديها CodeID من 2) مع "الطيور" ، وما إلى ذلك.

وبيان SQL 1ST: UPDATE animalTable SET cDescription = "القط" حيث CodeID = 1

وبيان SQL 2ND: UPDATE animalTable SET cDescription = "الطيور" حيث CodeID = 2

وهذه التصريحات تعمل، ولكن أنا بحاجة إلى وسيلة أسرع للقيام بذلك لأن لدي أكثر من 20 000 أسماء.

وشكرا لكم مقدما.

هل كانت مفيدة؟

المحلول

وولهذا أسرع طريقة يمكنك أن تفعل ذلك.

وأم أنك تريد تحديث كافة السجلات في أمر واحد؟

ويمكنك القيام به تحديث مع انضمام (الثابتة بناء الجملة ... طعاما تستخدم هذه واحدة في حين)

UPDATE animalTable 
INNER JOIN CodeTable ON animalTable.CodeID = CodeTable.ID 
SET animalTable.cDescription = CodeTable.Description_1;

وثمة خيار آخر هو لتقسيم التحديثات في دفعات صغيرة، وهذا سوف يقلل من الوقت تم تأمين الجدول ... ولكن سوف الوقت الإجمالي من التحديثات يستغرق وقتا أطول (ه صحيحة تحسين الأداء precieved) يمكنك القيام بذلك عن طريق تحديث نطاقات ID معينة فقط في كل دفعة.

وأيضا هل يمكن أن يكون هذه البيانات في جدول منفصل. لأنه لا تطبيع البيانات. تحريكه بعيدا حتى في أكثر تطبيع.

نصائح أخرى

وقد ترغب في إنشاء جدول مؤقت الذي يحمل القيم الترجمة والتحديث بناء على ذلك.

وعلى سبيل المثال:

create table #TRANSLATIONS
(
    from   varchar(32),
    to     varchar(32)
)

وبعد ذلك، أدخل القيم الترجمة:

insert into #TRANSLATIONS (from,to) values ('cat','dog')

وأخيرا، وتحديث على أساس ما يلي:

update MYTABLE
set    myvalue = t.to
where  myvalue = t.from
from   MYTABLE m,
       #TRANSLATIONS t

و(غير مجربة، من على قمة رأسي).

هل يمكن استخدام لتحديثه

وUPDATE animaltable SET cDescription = حالة codeID WHEN 1 ثم 'القط' WHEN 2 ثم 'الطيور' .... END

وSupposind لديك ملف مثل هذا:

1,cat
2,bird
...

وأود أن أكتب السيناريو الذي يقرأ هذا الملف وينفذ تحديثا لكل صف.

في PHP:

$f = fopen("file.csv","r")
while($row = fgetcsv($f, 1024)) {
    $sql = "update animalTable set cDescription = '".$row[1]."' where CodeID = ".$row[0];
    mysql_query($sql);
}
fclose($f);

وماذا يمكن القيام به لتسريع العملية ولتحديث السجلات التي لم يكن لديك بالفعل القيمة التي تريد تعيين.

UPDATE animalTable SET cDescription = "cat" WHERE CodeID = 1 AND cDescription != "cat"

وهذا النهج يجعل الأمر تحديث فقط تلك السجلات التي لم تكن بالفعل "القط".

تنويه: أنا أكره القطط

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top