2010-08-17 7 views
2

Je veux seach plus de 15000 valeurs dans une instruction select comme indiqué ci-dessous:multithread Recherche par C#

select * from tableA where id in (1,2,3......16000)

Puis-je utiliser des fils, disons autour de 3 et déstiné 15000 valeurs diffrent instruction select.

  1. select * from tableA where id in (1,2,3......5000)
  2. select * from tableA where id in (5001....10000)
  3. select * from tableA where id in (10001....15000)

et exécuter ces trois select statment en parallèle.

+0

Il peut être utile si vous avez inclus ce que db vous » re using –

+2

Techniquement, vous pouvez le faire, mais à moins que votre intention ne soit de traiter les données en morceaux aussi, cela ne vous aiderait pas beaucoup. Le tirage des données lui-même sera exécuté plus efficacement en un seul tirage qu'en tant que multiple. Si c'est le cas que vous devez traiter les données en morceaux, je tirerais d'abord les données, puis je les diviserais côté client plutôt que d'essayer de les extraire en tant qu'ensembles distincts du serveur. –

Répondre

2

Oui, mais la vraie question est pourquoi?

Quelque chose comme cela pourrait vous aider à démarrer:

var itms = new List<YourDataClass>(); 

var thr1 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 
var thr2 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 
var thr3 = new Thread(new ThreadStart(delegate() 
{ 
    // select code 
    // populate itms 
})); 

thr1.Start(); 
thr2.Start(); 
thr3.Start(); 

Cependant, cela dit, si vos identifiants sont des entiers et (en fonction de votre échantillon) la gamme de IN valeurs sont séquentielle, vous pouvez passer à un style where id > 1 and id < 16000. Cela peut améliorer les performances.

+0

Les identifiants ne sont pas séquentiels et peuvent ou non être intrus. – TalentTuner

+0

Bien compris, les exemples de données de votre question donnaient l'impression qu'ils pourraient l'être. – Nate

0

Cela est possible et peut même être une bonne idée car l'envoi d'une instruction (très) grande IN à une base de données peut entraîner des erreurs.

Votre base de données devrait gérer vos requêtes parallèles correctement et sans problèmes.