Длинное предложение IN - запах кода?

Простой вопрос. Хотите знать, является ли длинное предложение IN запахом кода? Я действительно не знаю, как это оправдать. Я не могу понять, почему он пахнет иначе, чем я думаю.

select
  name,
  code,
  capital,
  population,
  flower,
  bird
from us_states
where
  code in
    ('NJ', 'NY', 'PA', 'CA', 'AL', 'AK', 'AZ',
    'IL', 'IN', 'KY', 'KS', 'DC', 'MD', 'MA')

Как база данных обычно реализует такой поиск? Сделан ли временный стол и присоединен ли к нему? Или это просто развернутая последовательность логических операций ИЛИ?

Такое ощущение, что это должно было быть соединение ...

Я не говорю, что все предложения IN плохие. Иногда ничего не поделаешь. Но бывают случаи (особенно чем дольше они становятся), когда набор элементов, с которыми вы сопоставляете, действительно откуда-то берется. И не следует ли вместо этого объединить это?

Стоит ли создавать (на уровне приложения) временную таблицу, в которой есть все элементы, по которым вы хотите выполнять поиск, а затем выполнять реальное соединение против нее?

select u.*
from us_states u

join #chosen_states t
on u.code = t.code
8
задан Mark Canlas 5 July 2011 в 06:04
поделиться