SQL запросов: IN против равных - PullRequest
0 голосов
/ 31 августа 2018

У меня есть код, который генерирует SQL-оператор, который выглядит следующим образом:

SELECT * FROM items WHERE id IN (X, Y, Z)

где x, y, z - целые числа.

В одном случае мой массив содержит только одно целое число, из-за чего это генерируется

SELECT * FROM items WHERE id in (X)

В идеале это должно быть where id = x

Есть ли какие-либо последствия для производительности, вызывающие in вместо =, когда есть только 1 элемент?

1 Ответ

0 голосов
/ 31 августа 2018

На один предмет это не повлияет. Я проверил это на таблице, которая имеет 25000 строк и около 15 столбцов (без больших текстовых столбцов).

Если я использую это:

EXPLAIN  
SELECT
    *
FROM users
WHERE
    user_id = 10104

План запроса прост:

Index Scan using users_pkey on users  (cost=0.29..8.30 rows=1 width=147)
  Index Cond: (user_id = 10104)

Поскольку user_id является первичным ключом, он будет использовать его.

Теперь второй запрос:

EXPLAIN  
SELECT
    *
FROM users
WHERE
    user_Id IN(10104)

Получает точно такой же план запроса, потому что база данных знает, что это равные запросы в конце.

Я бы посоветовал вам выполнить те же запросы (с EXPLAIN) для ваших таблиц и посмотреть на себя, потому что я не знаю структуры ваших таблиц, индексов и т. Д.

Запустите такое же сравнение для запроса с более чем одним параметром, тогда все станет интереснее, но, поскольку ваш вопрос касается только одного элемента, вы можете спать спокойно, зная, что он не окажет никакого влияния.

Даже если бы это было так, по моему мнению, оно было бы настолько маленьким, что вам не пришлось бы тратить слишком много времени на размышления о том, что является лучшей практикой здесь. Убедитесь, что ваш код читабелен и хорошо написан, и это уже шаг в правильном направлении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...