Оптимизация SQL Select для перечисленных средств
-
27-09-2019 - |
Вопрос
Как этот запрос может быть оптимизирован для перечисленных средств:
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) кэш его! Пока вы не знаете, что произошло изменение, то перезагрузите его.
У меня закончились идеи ..