hvorfor dræner denne stored procedure min cpu totalt
hvorfor dræner denne stored procedure min cpu totalt? er det måden jeg joiner tabellerne på eller paging delen?ALTER PROCEDURE dbo.sp_FeedGetUserTournaments
(
@feedID int = 0,
@pokerRoomId int = 0,
@gameTypeId int = 0,
@limitTypeId int = 0,
@minBuyIn int = -1,
@maxBuyIn int = -1,
@prizePool int = 0,
@currentPage As int,
@pageSize As int = 20,
@totalRecords As int OUTPUT
)
AS
-- Turn off count return.
Set NoCount On
DECLARE @SelectClause varchar(8000),
@FromClause varchar(8000),
@WhereClause varchar(8000),
@OrderBy varchar(8000),
@WhereFound int,
@firstRec int,
@lastRec int
SET @WhereFound = 0
-- Initialize variables.
Set @firstRec = (@currentPage - 1) * @pageSize
Set @lastRec = (@currentPage * @pageSize + 1)
-- Create a temp table to hold the current page of data
-- Add an ID column to count the records
Create Table #TempTable
(
tournamentID int identity PRIMARY KEY,
pokerRoom varchar(60),
gameType varchar(20),
limitType varchar(12),
minBuyIn decimal(9,2),
maxBuyIn numeric,
prizePool numeric,
description text,
playDate datetime,
roomId int,
roomLink varchar(200),
affID varchar(200),
userAffLink varchar(200)
)
--SET IDENTITY_INSERT #TempTable ON
--Begin building SELECT clause
SET @SelectClause = 'SELECT roomName AS pokerRoom, gameName AS gameType, limitName AS limitType, minBuyIn,
maxBuyIn, prizePool, description, playDate, PokerRoom.roomId, PokerRoom.roomLink, PokerRoom.affID, FeedPokerUserRoom.userAffLink '
SET @FromClause = 'FROM Poker
INNER JOIN PokerRoom ON (PokerRoom.roomID = Poker.pokerRoomId)
INNER JOIN PokerGameType ON (PokerGameType.gameTypeId = Poker.gameTypeId)
INNER JOIN PokerLimitType ON (PokerLimitType.limitTypeId = Poker.limitTypeId)
LEFT JOIN FeedPokerUserRoom ON (FeedPokerUserRoom.roomID = PokerRoom.roomID)
AND FeedPokerUserRoom.feedID = ' + LTRIM(STR(@feedID))
IF @feedID <> 0
SET @FromClause = @FromClause + '
INNER JOIN FeedPokerRoom ON (FeedPokerRoom.roomID = Poker.PokerRoomId)
INNER JOIN FeedPokerGameType ON (FeedPokerGameType.gameTypeID = Poker.gameTypeID)
INNER JOIN FeedPokerLimitType ON (FeedPokerLimitType.limitTypeID = Poker.limitTypeID)'
--END building SELECT clause
--Begin building WHERE clause
IF @pokerRoomId <> 0 OR @gameTypeId <> 0 OR @limitTypeId <> 0 OR @minBuyIn <> -1 OR @maxBuyIn <> -1 OR @feedID <> 0 OR @prizePool <> 0
SET @WhereClause = CHAR(10) + 'WHERE '
ELSE
SET @WhereClause = ''
IF @pokerRoomId <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'Poker.pokerRoomId =' + LTRIM(STR(@pokerRoomId))
SET @WhereFound = 1
END
IF @gameTypeId <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'Poker.gameTypeId =' + LTRIM(STR(@gameTypeId))
SET @WhereFound = 1
END
IF @limitTypeId <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'Poker.limitTypeId =' + LTRIM(STR(@limitTypeId))
SET @WhereFound = 1
END
IF @minBuyIn <> -1
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'Poker.maxBuyIn >=' + LTRIM(STR(@minBuyIn))
SET @WhereFound = 1
END
IF @maxBuyIn <> -1
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'Poker.maxBuyIn <=' + LTRIM(STR(@maxBuyIn))
SET @WhereFound = 1
END
IF @feedID <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'FeedPokerRoom.feedID =' + LTRIM(STR(@feedID))
SET @WhereFound = 1
END
IF @feedID <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'FeedPokerGameType.feedID =' + LTRIM(STR(@feedID))
SET @WhereFound = 1
END
IF @feedID <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'FeedPokerLimitType.feedID =' + LTRIM(STR(@feedID))
SET @WhereFound = 1
END
IF @prizePool <> 0
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'prizePool >' + LTRIM(STR(@prizePool))
SET @WhereFound = 1
END
BEGIN
IF @WhereFound = 1
BEGIN
SET @WhereClause = @WhereClause + ' AND '
END
SET @WhereClause = @WhereClause
+ 'playDate >= DATEADD(HOUR,3,GETDATE()) '
SET @WhereFound = 1
END
--End building WHERE clause
--BEGIN building ORDER BY clause
SET @OrderBy = ' ORDER BY playDate '
--End building ORDER BY clause
declare @tempTableSql varchar(8000)
SET @tempTableSql = ' Insert Into #TempTable (pokerRoom, gameType, limitType,minBuyIn,
maxBuyIn,prizePool,description,playDate, roomId, roomLink, affID, userAffLink)
' + @SelectClause + @FromClause + @WhereClause + @Orderby
PRINT (@tempTableSql)
EXEC(@tempTableSql)
--Select one page of data based on the record numbers above
SELECT tournamentId, pokerRoom, gameType, limitType, minBuyIn, maxBuyIn, prizePool, description, playDate,roomId, roomLink, affID, userAffLink
FROM #TempTable AS Poker
WHERE tournamentId > @FirstRec
AND tournamentId < @LastRec
--Return the total number of records available as an output parameter
Select
@totalRecords = Count(*)
From
#TempTable
--PRINT (@SelectClause + @FromClause + @WhereClause + @OrderBy)
--EXEC(@SelectClause + @FromClause + @WhereClause + @OrderBy)
RETURN