2016-06-01 4 views
0

Я борюсь между двумя способами выполнения моей миссии.Проверка эффективности в sql-запросе

У меня есть множество условий, и когда все они истинны - мне нужно установить «true» в атрибуте «x» столбца этой записи.

Что более эффективно & рекомендуется, и почему?

  1. набор этот столбец в «ложь» для всех записей в таблице, а затем запустить другой запрос, чтобы установить «истинно» при некоторых условиях.
  2. установить «истина», если все условия «истинны», а затем запустить другой запрос, чтобы установить «ложь» во всех записях, где сбой одного или нескольких условий.

Я не могу предположить, что необходимо изменить значение по умолчанию для столбца «x», поскольку запрос должен запускаться также по очереди, когда это необходимо, после того, как начальные значения были вставлены в этот столбец, и некоторые условия могут быть изменены с момента последнего запуска этого запроса.

Возможно, есть еще одна идея, более эффективная, чем 2 выше?

Также я хотел бы понять, как эффективно рассчитать запрос, что-то похожее на способ эффективного вычисления в программировании.

+2

Просьба указать СУРБД, с которыми вы работаете, и условия для определения значения столбца. Кроме того, DDL для соответствующей таблицы (таблиц) и некоторых выборочных данных будет приятным. –

+0

'update the_table set the_column = condition', если ваша СУБД поддерживает логический тип данных –

ответ

1

Возможно, наиболее эффективным способом является использование case Statement, так как вы должны оценивать условие только один раз для строки и также должны изменять каждую строку только один раз, например.

UPDATE tablename SET fieldname = (CASE WHEN conditions THEN 'true' ELSE 'false' END) 

Деловые заявления, по крайней мере, доступны в Oracle и MS-SQL. Не знаю о других поставщиках БД.

0

Если все условия одинаковы в структуре данных, я не думаю, что это действительно имеет значение.

Если условия имеют разные структуры запросов данных (например, «мой ключ не является внешним ключом в tableB» и «State =« California »), значение true, а затем проверка их по одному (как последовательность операторов SQL) лучше, потому что вы можете сначала проверить простые и не беспокоиться о сложных для записей, которые уже удалили свой флаг.