2010-11-08 13 views
0

J'ai une table SQL avec des index contenant des leads à appeler. Environ 30 utilisateurs appellent ces prospects. Pour être sûr qu'il n'y a pas deux utilisateurs appelant la même piste, le système doit être instantané.Comment analyser directement une table indexée SQL

Je voudrais aller dans cette voie:

  • Définir la table à l'index droit
  • Scannez le tableau pour une avance que je peux appeler (il y a des conditions), après l'indice
  • quand j'ai un appel, indiquer que l'enregistrement est « utilisé »

Voici mes questions: - Je ne peux pas trouver un moyen de mettre une table à un index par code C# - Linq nécessite dataContext (pas instantané) et ADO nécessite DataSet

Je n'ai trouvé aucune ressource pour m'aider. Si vous en avez, ils sont plus que bienvenus. Désolé, si je peux sembler ignorant, je suis nouveau dans les bases de données SQL.

Merci beaucoup d'avance! Mathieu

+3

On ne sait pas très bien ce que vous entendez par "régler la table sur le bon index". Puisque vous êtes nouveau sur SQL, je suppose que vous ne savez peut-être pas que vous n'avez pas besoin de faire cette étape (en fait, je ne sais même pas ce que cette étape serait!). –

+0

Donc, si je veux mon dossier dans l'ordre d'une colonne DateTime parce que je veux les gérer du plus ancien au plus récent, comment faire? Je crée l'index sur le serveur SQL et je mets la même condition dans mon "SELECT ... ORDER BY samecondition"? – Mathieu

Répondre

1

J'ai déjà travaillé sur des systèmes similaires. Le tact que nous avons pris était d'avoir une routine de distribution qui traitait de distribuer les prospects aux gens du centre d'appels. Généralement, nous avions une limite de temps sur la durée pendant laquelle le lead pouvait être dans une file d'attente avant d'être retiré et donné à quelqu'un d'autre. Cela nous a permis de faire des choses assez compliquées, comme donner des préférences en fonction des détails de la piste ainsi que de la productivité de chaque personne du centre d'appels.

Nous avions un très grand nombre de leads entrants et notre routine de distribution était configurée pour s'exécuter une fois par minute. Le SLA a été fixé de sorte qu'un chef de file a été contacté dans les 2 minutes de notre connaissance à leur sujet. Pour ce faire, votre table de leads doit avoir un AssignedUserId et probablement un horodatage de l'heure à laquelle elle a été affectée. Écrire un proc ou un code C# qui saisit tous les enregistrements de cette table qui ne sont pas assignés. Effectuez la routine d'affectation en sauvegardant les modifications dans la table.Cette routine devrait probablement prendre en compte le nombre de leads qu'ils travaillent actuellement et le nombre acceptable de leads ouverts par personne afin de donner la préférence dans une distribution à la ronde.

Lors de l'actualisation de l'utilisateur, ils auront leurs prospects. Vous pouvez contrôler le taux de rafraîchissement dans l'interface utilisateur.

+0

C'est très intelligent en fait. Ce n'est pas le système que nous avions l'habitude d'utiliser, mais cela pourrait augmenter la performance. C'est définitivement quelque chose de bien! Merci beaucoup! – Mathieu

1

Je ne vois pas comment votre exigence d'être «instantané» se rapporte à l'utilisation d'un index. L'accès à une table par index n'est pas instantané non plus.

Pour résoudre votre problème, je suggère de verrouiller toute la table pendant qu'un appel est en cours. Cela limitera les performances, mais garantira également que le même lead n'est jamais appelé par deux utilisateurs.

code Exemple:

Begin Transaction 
Lock Table 
Search for Lead 
Update Lead to indicate that it is in use 
Commit Transaction (removes the lock) 

verrouillage d'une table dans SQL Server jusqu'à la fin de la transaction peut être effectuée en utilisant SELECT * FROM table WITH (HOLDLOCK, TABLOCKX) WHERE 1=0. Oui, je suis conscient que des solutions plus propres avec moins de verrouillage sont possibles. L'avantage de la solution ci-dessus est qu'elle est simple (ne pas s'inquiéter du niveau d'isolation de transaction correct, etc.) et qu'elle est suffisamment performante (si vous vous souvenez de garder la partie verrouillée courte et qu'il n'y a pas trop d'accès simultanés) .