2009-08-27 7 views

Répondre

4

C'est la façon la plus propre et la plus optimisée qui soit. Assurez-vous qu'il y a un index sur reset_key et ce sera très, très rapide.

+0

C'est vrai, comment optimisez-vous quelque chose comme ça? –

+0

En lisant votre commentaire sur un post ci-dessous, j'ai réalisé en utilisant une colonne d'index serait mieux. Mais, cela n'a pas d'importance si je dois utiliser un endroit? depuis que j'ai besoin de lire le nonindex où la colonne de toute façon? (Si oui, mon code est correct). –

+0

La colonne 'where' est celle qui doit être indexée, puisque c'est ce sur quoi le SGBDR filtre. – Eric

0

Essayez

Select Case When Exists (Select * From user_Data 
          Where reset_key = @key) 
       Then 1 Else 0 End 
+0

Do 'select 1' au lieu de' select * '. Il n'est pas nécessaire de ramener l'intégralité de l'ensemble de colonnes quand 'existe 'ne se soucie que de savoir s'il y a ou non une rangée. Ce serait lent s'il y avait un champ 'varchar (max)' ou quelque chose de ce genre. En outre, ce n'est vraiment pas plus rapide qu'un 'count' avec une colonne indexée. – Eric

+0

est ce code vb? Si vous choisissez * qui renvoie toutes les colonnes, c'est bien pire. –

+0

@Eric, Select * à l'intérieur d'un Exists ne ramène pas toute la ligne ... Il vérifie juste si la ligne existe ... exactement comme le ferait Select 1, mais est la syntaxe recommandée lors de l'utilisation de Exists(). –

0

SQLite a le soutien de la clause LIMIT. Cela pourrait aider.

EDIT: Je ne connais pas la syntaxe SQLite. Mais dans le sens SQL, il ressemblerait

Select 1 From user_Data Where reset_key = @key LIMIT 1 
+0

Je ne vois pas comment LIMIT aiderait s'il y avait seulement au moins une ligne. –

+0

@Dan: OP a demandé l'existence d'enregistrements pour un critère donné. Si vous faites un SELECT avec une LIMITE 1, si cela renvoie 1 ligne - cela signifie que l'enregistrement existe pour des critères donnés et pas autrement. Ai-je bien compris la question? – shahkalpesh

0
command.CommandText = "SELECT TOP 1 1 FROM user_data WHERE [email protected]" 

if (commmand.ExecuteScalar() == null) 
{ 
    //code for no matches here 
} 
Questions connexes