الأداء في شركة تنمية نفط عمان / PHP / ماي: صفقة مقابل التنفيذ المباشر

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

سؤال

وأنا حلقات من خلال عدد من القيم (1-100 على سبيل المثال) وتنفيذ بيان معد سلفا داخل الحلقة.

هل هناك وميزة لاستخدام المعاملات - ارتكاب بعد انتهاء حلقة - بالمقارنة مع التنفيذ المباشر داخل الحلقة

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

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

المحلول

إذا الاستفسارات الخاصة بك إدراج، و 7.2.19 . سرعة البيانات INSERT من دليل الخلية يعطي اثنين من المعلومات مثيرة للاهتمام، وهذا يتوقف على ما إذا كان لديك تستخدم محرك transactionnal أم لا:

عند استخدام محرك غير transactionnal:

<اقتباس فقرة>   

لتسريع عمليات INSERT التي هي   أجريت مع عبارات متعددة ل   الجداول nontransactional، قفل الخاص بك   الجداول.

     

وهذه الفوائد الأداء لأن   يتم مسح عازلة مؤشر إلى القرص فقط   مرة واحدة، بعد كل التصريحات INSERT ديك   منجز. عادة، يكون هناك ما   العديد من الهبات مؤشر عازلة كما أن هناك   ادخال البيانات. قفل صريح   ليست هناك حاجة البيانات إذا كنت تستطيع   إدراج كافة الصفوف مع INSERT واحد.

و، مع محرك transactionnal:

<اقتباس فقرة>   

لحصول الإدراج أسرع ل   الجداول المعاملات، يجب عليك استخدام   ستارت المعاملات وارتكاب بدلا   من الجداول LOCK.

وهكذا أنا على التخمين استخدام المعاملات قد يكون فكرة جيدة - ولكن أعتقد يمكن أن تعتمد على الحمل على الخادم الخاص بك، وإذا كانت هناك استخدامات متعددة باستخدام نفس الطاولة في نفس اللحظة، وكل ما ...

وهناك المزيد من المعلومات على الصفحة I مرتبطة، لذلك لا تتردد في قراءتها؛ -)

و
وإذا كنت تفعل عبارات التحديث :

<اقتباس فقرة>   

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

وهكذا، وأنا على التخمين ويمكن قول الشيء نفسه من أجل إدراج.

و
راجع للشغل: للتأكد من ذلك، يمكنك محاولة كلا الحلول، قياس لهم microtime ، وعلى الجانب PHP، على سبيل المثال ؛ -)

نصائح أخرى

لوقت أسرع يمكنك أن تفعل كل يدرج في طلقة واحدة، أو تجميعها معا، وربما 5 أو 10 في وقت واحد، كما لو فشل إدراج واحد الدفعة كلها صح التعبير.

http://www.desilva.biz/mysql/insert.html

ومعاملة سيتباطأ أنت إلى أسفل، حتى إذا كنت لا تحتاج إليها ثم لا يستخدمونه.

وقال بيان على استعداد أن يكون خيارا جيدا على الرغم من إذا فعلتم إدراج دفعة، كما لم يكن لديك للحفاظ على بناء الاستعلام في كل مرة.

وأنا واجهت نفس السؤال عندما أتيحت لي لتنفيذ ملف CSV استيراد البيانات (ربما طويلة جدا) (وأنا أعلم أنك يمكن أن تستخدم في تحميل البيانات INFILE بناء الجملة من أجل ذلك ولكن كان لي لتطبيق بعض المعالجة على حقول بلدي قبل الإدراج).

وفصنعت تجربة مع المعاملات وملف مع حوالي 15K الصفوف. والنتيجة هي أنه إذا كنت إدراج جميع السجلات داخل معاملة واحدة فريدة من نوعها، ويستغرق سوى بضع ثوان، وانها وحدة المعالجة المركزية ملزمة. إذا كنت لا تستخدم أي صفقة على الإطلاق، فإنه يأخذ عدة دقائق وانها يحدها IO. من خلال ارتكاب كل الصفوف N، حصلت على نتائج المتوسطة.

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