早上,所有的SQL Server數據庫的訪問速度,增加數以百萬計的記錄
我有一個網站,我就這一工作大約2000頁的代碼,它是一個社交媒體網站的企業。它有數百萬用戶的潛力。目前我們有大約80,000個用戶,並且網站訪問速度越來越慢。我在網站中使用98%的存儲過程來提高速度。我想知道的是我能做些什麼來提高數據提取速度並增加網站加載時間。我的知識是數據庫的成員表沒有使用全文索引,這會有所作爲嗎?我想它會搜索。但是,例如,登錄時需要一段時間才能加載。下面是登錄腳本SP:
SELECT
a.MemberID,
CAST (ISNULL(a.ProfileTypeID,0) AS bit) AS HasProfile,
a.TimeOffsetDiff * a.TimeOffsetUnits AS TimeOffset,
b.City,
b.StateName AS State,
b.StateAbbr AS abbr,
b.Domain,
b.RegionID,
a.ProfileTypeID,
sbuser.sf_DisplayName(a.MemberID) AS DisplayName,
a.UserName,
a.ImgLib,
a.MemberREgionID AS HomeRegionID,
a.StateID,
a.IsSales,
a.IsAdmin
FROM Member a
INNER JOIN Region b ON b.RegionID = a.MemberRegionID
WHERE a.MemberID = @MemberID
UPDATE Member SET NumberLogins = (NumberLogins + 1) WHERE MemberID = @MemberID
考慮到這一點僅通過80000會員獵可能需要長達15秒登錄,我認爲這是真正的慢。有關如何提高登錄速度的任何想法?
顯然,提取成員列表到頁面也很費力。我最近更新包含的臨時數據集之類的尋呼和用下面的例子取代它過時的TF腳本:
IF @MODE = 'MEMBERSEARCHNEW'
DECLARE @TotalPages INT
BEGIN
SELECT @TotalPages = COUNT(*)/@PageSize
FROM Member a
LEFT JOIN State b ON b.StateID = a.StateID
WHERE (sbuser.sf_DisplayName(a.MemberID) LIKE @UserName + '%')
AND a.MemberID <> @MemberID;
WITH FindSBMembers AS
(
SELECT ROW_NUMBER() OVER(ORDER BY a.Claimed DESC, sbuser.sf_MemberHasAvatar(a.MemberID) DESC) AS RowNum,
a.MemberID, -- 1
a.UserName, -- 2
a.PrCity, -- 3
b.Abbr, -- 4
sbuser.sf_MemberHasImages(a.MemberID) AS MemberHasImages, -- 5
sbuser.sf_MemberHasVideo(a.MemberID) AS MemberHasVideo, -- 6
sbuser.sf_MemberHasAudio(a.MemberID) AS MemberHasAudio, -- 7
sbuser.sf_DisplayName(a.MemberID) AS DisplayName, -- 8
a.ProfileTypeID, -- 9
a.Zip, -- 10
a.PhoneNbr, -- 11
a.PrPhone, -- 12
a.Claimed, -- 13
@TotalPages AS TotalPages -- 14
FROM Member a
LEFT JOIN State b ON b.StateID = a.StateID
WHERE (sbuser.sf_DisplayName(a.MemberID) LIKE @UserName + '%')
AND a.MemberID <> @MemberID
)
SELECT *
FROM FindSBMembers
WHERE RowNum BETWEEN (@PG - 1) * @PageSize + 1
AND @PG * @PageSize
ORDER BY Claimed DESC, sbuser.sf_MemberHasAvatar(MemberID) DESC
END
是否有另一種方式我可以擠出更多的速度出這個腳本..?
我有其他建議,包括gzip壓縮,根據字母表中的字母將成員表分成26個表。我很想知道大公司如何做,他們如何安排他們的數據,像Facebook,Yelp,黃頁,Twitter等網站。我目前正在共享託管服務器上運行,升級到VPS或專用服務器有助於提高速度。
該網站是用傳統的ASP,利用SQL Server 2005的
任何幫助,任何你可以提供將不勝感激。
最好的問候和快樂編碼!
保羅
****開始。此外:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [sbuser].[sf_DisplayName](@MemberID bigint)
RETURNS varchar(150)
AS
BEGIN
DECLARE @OUT varchar(150)
DECLARE @UserName varchar(50)
DECLARE @FirstName varchar(50)
DECLARE @LastName varchar(50)
DECLARE @BusinessName varchar(50)
DECLARE @DisplayNameTypeID int
SELECT
@FirstName = upper(left(FirstName, 1)) + right(FirstName, len(FirstName) - 1),
@LastName = upper(left(LastName, 1)) + right(LastName, len(LastName) - 1) ,
@BusinessName = upper(left(BusinessName, 1)) + right(BusinessName, len(BusinessName) - 1),
@UserName = upper(left(UserName, 1)) + right(UserName, len(UserName) - 1),
/*
@FirstName = FirstName,
@LastName = LastName,
@BusinessName = BusinessName,
@UserName = UserName,
*/
@DisplayNameTypeID = DisplayNameTypeID
FROM Member
WHERE MemberID = @MemberID
IF @DisplayNameTypeID = 2 -- FIRST/LAST NAME
BEGIN
/*SET @OUT = @FirstName + ' ' + @LastName*/
SET @OUT = @LastName + ', ' + @FirstName
END
IF @DisplayNameTypeID = 3 -- FIRST NAME/LAST INITIAL
BEGIN
SET @OUT = @FirstName + ' ' + LEFT(@LastName,1) + '.'
END
IF @DisplayNameTypeID = 4 -- BUSINESS NAME
BEGIN
SET @OUT = @BusinessName + ''
END
RETURN @OUT
END
****加成END
你怎麼知道性能問題是在SQL服務器上? – 2011-03-10 16:39:03
還有什麼...... ..?洗耳恭聽..! – neojakey 2011-03-10 16:43:20
在SQL Management Studio中運行該存儲過程,或爲代碼添加一些時間。找出頁面的哪些特定部分需要這麼長時間,以便確保將您的努力付諸正確。 – 2011-03-10 16:48:42