تستخدم عملية MySQL أكثر من 100٪ استخدام وحدة المعالجة المركزية وتحتاج إلى حوالي 1 جيجابايت من الذاكرة
سؤال
أقوم بتشغيل خادم MySQL على الخادم الذي لديه المواصفات التالية -
Dual Xeon رباعية النواة 2.0، 2048 ميغابايت، 1x 160 جيجابايت ساتا فيدورا كور + SSH
لكن عملية MySQL لإدراج 10000 سجل تأخذ أكثر من 100٪ من وحدة المعالجة المركزية وما يصل إلى 1 جيجابايت من ذاكرة الوصول العشوائي. إنه بيان إدراج عادي.
لماذا تأخذ MySQL الكثير من الذاكرة وما الذي يمكن القيام به حيال ذلك؟
المحلول
أدنى جزء في استفسارك هو تحديد:
Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer
Where UserID Between 1 and 5000
and CustomerID in (Select CustId from Cust_Details Where CustName like 'Mi%')
من المحتمل أن يتكرر الاستعلام المتداخل لكل صف. يمكنك التحقق من هذا الجري EXPLAIN PLAN
+ جميع الاستعلام المحدد. أعتقد أن المشغل "مثل" يستخدم مقابل عمود غير مفهرس. في هذه الحالة (like 'xyz%'
) يمكن أن يحسن مؤشر بسيط الأداء كثيرا.
أضيف: علاوة على ذلك، حدد Custid ... يجب إخراج معرف أكبر من 5000، التي ليست حاجة على الإطلاق. يجب أن تكون مؤشر مركب (كاستد، Curname) على Cust_Details مفيدا أيضا.
حاول usign الانضمام بدلا من ذلك:
Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer c, Cust_Details cd
Where c.UserID Between 1 and 5000
and c.CustomerID=cd.CustId
and left(cd.CustName) = 'Mi'