Я преподаю основные и промежуточные концепции SQL для проекта, над которым я работаю.Каков наиболее эффективный способ обработки строк в таблице?
У меня есть много данных, которые нужно обрабатывать, поэтому их можно представить по-разному. В настоящее время я использую вызовы скалярных функций в моей инструкции select для обработки данных.
Простой пример: скажем, у меня есть атрибут в моей таблице, называемый fun как тип данных int. Я хочу обработать свой стол так, чтобы все строки с забавой < 10 были «foo», и все строки с потерей> 10 были «faa».
Так я пишу функцию SQL-то вроде
CREATE FUNCTION dbo.fooORfaa
(
@fun AS int
)
RETURNS VARCHAR(3)
AS
BEGIN
IF (@fun < 10)
RETURN 'foo'
RETURN 'faa'
END
Тогда я использую свою функцию в чем-то вроде этого оператора выбора
select dbo.fooORfaa([mytable].[fun]) AS 'blah'
from mytable
Этот пример тривиален, но в моем реальном коде мне нужно выполнить какая-то довольно связанная логика с одним или несколькими столбцами, и я выбираю подвыборы из процедур и объединения таблиц вместе и другие вещи, которые вам нужно делать в базе данных.
Мне нужно обработать много записей за разумный промежуток времени. Является ли этот метод эффективным способом решения этой проблемы? Есть ли другой метод, который я должен использовать вместо этого?
, если поля, лежащие в основе вашей 'функции fooORfaa' относительно неизменны, и/или расчеты вы делаете, является«тяжелым»или«дорогой», то вы, вероятно, будет лучше сохранять их в дополнительные поля, поэтому вы не тратите тонну процессора, переделывая все вычисления каждый раз, когда работаете со столом. несколько подходящих триггеров могут поддерживать актуальность таблицы в случае (надеюсь) редких случаев изменения значений. –
Использование магазина Процедура магазина – Hiten004
Хотя неинтуитивные табличные функции часто более эффективны, чем скалярнозначные функции. –