2009-08-27 2 views
1

Прямо сейчас, используя SQLite я пишу ниже (я может перейти на любой из MySQL или MS SQL)Как проверить, существует ли что-нибудь в SQL db?

command.CommandText = "SELECT count(reset_key) user_data WHERE [email protected];"; 

Это работает, но есть более оптимизированный или уборщик способом?

+0

@ acidzombie24: Разве я не правильно понимаю ваш вопрос? Не помогает ли предложение LIMIT? – shahkalpesh

ответ

4

Это самый чистый, самый оптимизированный способ. Удостоверьтесь, что есть индекс на reset_key, и это будет очень, очень быстро.

+0

Правильно, как вы оптимизируете что-то подобное? –

+0

Прочитав ваш комментарий к сообщению ниже, я понял, используя колонку с индексом, будет лучше. Но, это не имеет значения, если я должен использовать где? так как мне нужно читать nonindex, где column anyways? (если это так, то мой код в порядке). – 2009-08-27 16:26:39

+0

Столбец 'where' - это тот, который нужно индексировать, поскольку это то, что фильтрует РСУБД. – Eric

0

Попробуйте

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

Сделайте 'select 1' вместо' select * '. Не нужно возвращать весь набор столбцов, когда 'существует', только заботится о том, есть ли там строка. Это будет медленным, если есть поле «varchar (max)» или что-то подобное. Кроме того, это действительно не быстрее, чем 'count' с индексированным столбцом. – Eric

+0

это код vb? если вы делаете select *, который возвращает все столбцы, то это намного хуже. – 2009-08-27 16:23:05

+0

@ Эрик, выберите * внутри Exists НЕ возвращает всю строку ... Он просто проверяет, существует ли строка ... точно так же, как и Select 1, но является рекомендуемым синтаксисом при использовании Exists(). –

0

SQLite имеет поддержку пункта ЛИМИТ. Это может помочь.

EDIT: Я не знаю синтаксиса SQLite. Но в SQL смысле, это будет выглядеть как

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

Я не вижу, как LIMIT поможет, если будет только каждый, будет, самое большее, одной строкой. –

+0

@ Dan: ОП запросил наличие записей для данного критерия. Если вы выполняете SELECT с LIMIT 1, если это возвращает 1 строку - это означает, что запись существует для заданных критериев, а не иначе. Правильно ли я понял вопрос? – shahkalpesh

Смежные вопросы