Morning All,
У меня есть веб-сайт, над которым я работаю, около 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
Учитывая, что это охота только через 80 000 участников и может занять до 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, разбить таблицу Member на 26 таблиц на основе букв алфавита.Мне интересно знать, как это делают крупные компании, как они размещают свои данные, такие сайты, как Facebook, Yelp, Yellow Pages, 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
**** ДОКЛАД КОНЕЦ