在存储过程中,我需要在@StartDate和@EndDate之间以7天的日期间隔填充临时表,如下所示:
CREATE TABLE #DateIntervals (
PeriodStartDate date,
PeriodEndDate date
)
DECLARE @StartDate datetime = '1/1/2017';
DECLARE @EndDate datetime = '1/1/2018';
WHILE @StartDate <= @EndDate
BEGIN
INSERT INTO #DateIntervals (PeriodStartDate, PeriodEndDate)
SELECT @StartDate, DATEADD(day, 6, @StartDate)
SET @StartDate = DATEADD(day, 7, @StartDate)
END
它工作正常,但执行时需要 1483毫秒。如果我随后将此表与更多数据连接起来,则需要更多时间来执行。我需要以某种方式缩短这段时间,以提高SP的整体性能。
任何想法如何做到这一点?
答案 0 :(得分:1)
您可以使用以下单个声明执行此操作
vehicle = { id: 1, name: 'LADA', type: 'washbowl', revision: 15 }
class VehicleDetails < Grape::Entity
expose :id
expose :name
expose :type
expose :revision, if: lambda { |vehicle, options| options[:show_rev] }
end
VehicleDetails.represent(vehicle, show_rev: true).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl", :revision=>15}
VehicleDetails.represent(vehicle).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl"}
VehicleDetails.represent(vehicle, show_rev: false).as_json
# => {:id=>1, :name=>"LADA", :type=>"washbowl"}
# # or
# present vehicle with: VehicleDetails, show_rev: true
这应该比53个单独的语句/事务快,但1.5秒对于临时表来说听起来非常慢。