سؤال

كيف يمكن تحسين هذا الاستعلام للعدادات:

SELECT * FROM Customers

Table Customers
customerId int - has index on it
customerName, etc

سيتم قراءة SQLReader التي تُرجع عملاء مجموعة عند الطلب بطريقة تعداد. على الرغم من أنه يمكنه إرجاع مجموعات بيانات ضخمة يمكن قراءتها/استهلاكها ببطء في حلقة foreach ، فإن كل استعلام آخر على نفس الجدول سيواجه الكثير من الادعاءات. كيف يمكن تحسين هذا/تجنبه؟ المؤشرات أو الاختيار في جداول مؤقتة؟

فيما يلي مثال رمز سيؤدي إلى الكثير من الادعاءات (لقد قمت بتعيينه والأرقام تبدو سيئة بالفعل):

public void DumpCustomers()
{
    Thread thread = new Thread(AccessCustomers);
    thread.Start();

    // GetCustomers returns enumerator with yield return; big # of customers 
    foreach (Customer customer in GetCustomers())  
    {
       Console.WriteLine(customer.CustomerName);
       System.Threading.Thread.Sleep(200);
    }
    thread.Abort();
}

public void AccessCustomers()
{
   while (true)
   {
      Console.WriteLine(GetCustomer("Zoidberg").CustomerName);
      Thread.Sleep(100);
   }
}


ملاحظة: سأحتاج أيضًا إلى تحسين هذا في MySQL.

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

المحلول

1) هل تحتاج إلى "*" لا يمكنك تحديد الأعمدة.

2) استخدم الأسماء المتعددة dbo.tablename.fieldname - هذا يسرع

3) جرب تلميحًا قفلًا مع (Nolock) أو (Readpast)

4) ما هو ملف IO؟ هل يتعين على SQL سحب البيانات من القرص في كل مرة يتم تشغيلها؟

5) هل تجد أحد النوى على الخادم الخاص بك كحد أقصى بينما يكون الآخر خاملاً؟

6) ذاكرة التخزين المؤقت! حتى تعرف أنه كان هناك تغيير- ثم إعادة تحميله.

لقد نفدت الأفكار ..

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