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.

Était-ce utile?

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 ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top