эффективный способ проверить, существует ли строка таблицы - PullRequest
2 голосов
/ 27 января 2012

Я пытаюсь найти наиболее эффективный способ определить, существует ли строка таблицы.

Я имею в виду 3 варианта:

  1. SELECT EXISTS (SELECT1 ИЗ таблицы1 ГДЕ some_condition);

  2. ВЫБРАТЬ 1 ИЗ таблицы1 ГДЕ some_condition LIMIT 0,1;

  3. ВЫБЕРИТЕ СЧЕТ (1) ИЗ таблицы1 ГДЕ some_condition;

Кажется, что для MySQL первый подход более эффективен: Bestспособ проверить, существует ли строка в таблице MySQL

Верно ли это вообще для любой базы данных?

ОБНОВЛЕНИЕ:

Я добавил третий вариант.

ОБНОВЛЕНИЕ2:

Предположим, что продуктами базы данных являются mysql, oracle и sql-server.

Ответы [ 5 ]

4 голосов
/ 27 января 2012

Если вы хотите использовать в качестве теста, если по крайней мере одна строка существует с некоторым условием (1 или 0, истина или ложь), то:

select count(1) from my_table where ... and rownum < 2;

Оракул может перестать считать после попадания.

4 голосов
/ 27 января 2012

Я бы сделал

SELECT COUNT(1) FROM table 1 WHERE some_condition.

Но я не думаю, что это имеет существенное значение, если вы не называете это много (в таком случае, я бы, вероятно, использовал другую стратегию).

3 голосов
/ 27 января 2012

У разных методов разные плюсы и минусы:

SELECT EXISTS(SELECT 1 FROM table1 WHERE some_condition);

может быть самым быстрым на MySQL, но

SELECT COUNT(1) FROM table 1 WHERE some_condition

как в ответе @Luis дает вам счет.

Более того, я рекомендую вам взглянуть на свою бизнес-логику: очень редко нужно просто посмотреть, существует ли строка, чаще вам захочется

  • либо используйте эти строки, так что просто выберите и обработайте случай с 0 строками
  • или вы захотите изменить эти строки, в этом случае просто выполните обновление и проверьте mysql_affered_rows ()
  • Если вы хотите ВСТАВИТЬ строку, если она еще не существует, взгляните на INSERT .. ON DUPLICATE KEY или REPLACE INTO
3 голосов
/ 27 января 2012

Exists быстрее, потому что он возвращает количество результатов, соответствующих подзапросу, а не весь результат.

1 голос
/ 27 января 2012

Существующая функция обычно определяется в SQL, а не только как функция MySQL: http://www.techonthenet.com/sql/exists.php и я обычно использую эту функцию, чтобы проверить, существует ли конкретная строка.

Однако в Oracle я много раз видел другой подход, предложенный ранее:

SELECT COUNT(1) FROM table 1 WHERE some_condition.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...