SQLite является дорогой Оператор выбора?

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

SELECT Users, 
                CASE WHEN Active = 0 THEN 'Inactive'
                        WHEN Active = 1 THEN 'Active'
                        WHEN Active = 2 THEN 'Processing'
                        ELSE 'ERROR' END AS Active
FROM UsersTable;

Когда это лучше, чтобы составить ссылочную таблицу и выполнить СОЕДИНЕНИЕ. В этом случае я составил бы Таблицу 'ActiveStatesTable' с ActiveID, ActiveDescription и выполнил бы СОЕДИНЕНИЕ.

10
задан 2 revs, 2 users 96% 14 December 2013 в 20:59
поделиться

3 ответа

Оператор CASE является предпочтительным синтаксисом:

  • Это ANSI (92?), Поэтому он поддерживается в MySQL, Oracle, SQL Server, Postgres ... в отличие от IF, специфичного для поставщика базы данных синтаксис
  • Он поддерживает короткие циклы - остальная часть оценки не выполняется, если критерии соответствуют
11
ответ дан 3 December 2019 в 21:20
поделиться

Создание отдельной таблицы и JOIN, безусловно, более чистый способ написания этого кода. Что произойдет, например, если вы захотите написать другой запрос с такими же сопоставлениями? Вам придется скопировать оператор CASE в новый запрос, а дублирование копий - это плохо. Что произойдет, если вам нужно добавить новое состояние Active?

С точки зрения производительности и JOIN, и CASE должны быть довольно дешевыми. CASE может быть немного более производительным из-за короткого замыкания оценки и нескольких случаев, но JOIN, на мой взгляд, более чистое и гибкое и более SQL-ey решение.

3
ответ дан 3 December 2019 в 21:20
поделиться

CASE должен быть намного дешевле, так как он не должен включать никаких операций ввода-вывода, но для небольших таблиц JOIN также не так дороги (но протестируйте его).

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

3
ответ дан 3 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: