Что быстрее "где col =? Или col =? Или col =?"ИЛИ "где col в (?,?,?)" В C с informix (.ec / esql)? - PullRequest
1 голос
/ 12 сентября 2011

Наш код написан на C, а DB - это Informix. Мы проводим некоторую оптимизацию кода в программе ESQL и нашли следующий запрос:

ОБНОВЛЕНИЕ [ТАБЛИЦА] SET [ОСНОВНАЯ КЛЮЧЕВАЯ КЛАВИША] = [НОВЫЙ КЛЮЧ] ГДЕ COL =? ИЛИ COL =? ...

Количество столбцов в предложении where динамически подготовлено. У нас есть проверка верхнего счетчика, чтобы прекратить подготовку предложения where и выполнить обновление, а затем вернуться и начать подготовку остальных. UPPER_MARK - "30"

if (where_parameter_count> = UPPER_MARK)
__ выполнить обновление __
__ clean_and_continue; / * начать готовиться снова * / __

Мы подумали о замене ГДЕ .. ИЛИ ГДЕ ... В

ОБНОВЛЕНИЕ [ТАБЛИЦА] SET [КОЛОНКА ПЕРВИЧНЫХ КЛЮЧЕЙ] = [НОВЫЙ КЛЮЧ] ГДЕ ЦВЕТ (?,? ...)

Будет ли это быстрее, чем "где или"?

1 Ответ

3 голосов
/ 12 сентября 2011

Любой синтаксис сводится к тому же самому, что касается оптимизатора запросов.Это не будет иметь никакого значения.

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

x IN (a, b) AND y = z

и

x = a OR x = b AND y = z

НЕ одно и то же.

...