Comment cette requête est optimisé pour les agents recenseurs:Optimisation de Sélectionnez SQL pour les agents recenseurs
SELECT * FROM Customers
Table Customers
customerId int - has index on it
customerName, etc
SqlReader qui retourne un ensemble de clients sera lu à la demande de façon recenseur. Bien qu'il puisse renvoyer d'énormes ensembles de données pouvant être lus/consommés lentement dans une boucle foreach, toutes les autres requêtes sur la même table rencontreront beaucoup de conflits. Comment cela peut-il être optimisé/évité? Curseurs ou sélection dans des tableaux temporaires?
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);
}
}
post-scriptum Je vais aussi devoir optimiser cela dans MySQL.
Y a-t-il un moyen de filtrer vos résultats en utilisant un O WH? Si vous sélectionnez la table entière, cela n'a pas d'importance que customerId ait un index dessus. Peut-être devriez-vous mettre en place une sorte de pagination/récupération? – dotariel
d'accord, ce n'est pas grave. Non je ne peux pas filtrer quoi que ce soit avec la clause WHERE, toute la table doit être vidée – kateroh
Pouvez-vous être plus précis sur ce que vous avez l'intention de faire avec cet ensemble de données volumineux? – dotariel