Optimisation de SQL Select pour les agents recenseurs
-
27-09-2019 - |
Question
Comment cette requête peut être optimisé pour les agents recenseurs:
SELECT * FROM Customers
Table Customers
customerId int - has index on it
customerName, etc
SqlReader qui renvoie un ensemble de clients seront lus à la demande de façon recenseur. Bien qu'il puisse retourner d'énormes ensembles de données qui peuvent être lus / consommés lentement dans une boucle foreach, toutes les autres requêtes sur la même table rencontrera beaucoup de querelles. Comment cela peut-il être optimisé / évité? Ou dans la sélection Curseurs tables de temp?
Voici un exemple de code qui provoque beaucoup de disputes (je PROFILES et les chiffres semblent mauvais effet):
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);
}
}
P.S. Je vais aussi besoin d'optimiser ce MySQL.
La solution
1) Est-ce que vous avez besoin du '*' ne peux pas vous spécifiez les colonnes.
2) Utiliser les noms à plusieurs parties dbo.tablename.fieldname - cette vitesse vers le haut
3) essayer une pointe de verrouillage avec (nolock) ou (readpast)
4) Quel est le profil IO? Est-ce que SQL doivent extraire les données à partir du disque à chaque fois qu'il fonctionne?
5) Trouvez-vous l'un des noyaux sur votre serveur Maximisez tandis que l'autre est inactif?
6) en cache! Jusqu'à ce que vous savez qu'il ya eu une Change- puis la recharger.
Je suis à court d'idées ..