Вопрос

Как этот запрос может быть оптимизирован для перечисленных средств:

SELECT * FROM Customers

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

SQLREADER, который возвращает заданные клиенты, будут прочитаны по требованию в моде перечислетеля. Хотя он может вернуть огромные наборы наборов данных, которые могут быть медленно прочитаны / потребляются в петле FORACH, каждый другой запрос на одной таблице столкнется с большим количеством контейнентов. Как это может быть оптимизировано / избежать? Курсоры или выбор в TEMP таблицы?

Вот пример кода, который приведет к большому количеству контактов (я профилировал его, а цифры действительно выглядят плохо):

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);
   }
}


PS Мне также нужно оптимизировать это в MySQL.

Это было полезно?

Решение

1) Вам нужна «* 'не может указывать столбцы.

2) Используйте множественные имена DBO.TableName.FieldName - это ускоряет его

3) Попробуйте заблокировать намек с (Nolock) или (ReadPast)

4) Какой профиль IO? Нужно ли SQL вытягивает данные с диска каждый раз, когда он работает?

5) Вы находите один из серверов на вашем сервере Max Out, а другой - простаивающий?

6) кэш его! Пока вы не знаете, что произошло изменение, то перезагрузите его.

У меня закончились идеи ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top