(ja*******@gmai l.com) writes:
Sorry for not having to replied earlier.
here is the code.
this is the query that gets fired;
Most likely what is killing you is all the calls to
fnCommonFriends Step. (But if the vw_search view is complex, the reason
may be found there.)
I see that Plamen has offered a rewrite where he
has turned the function into a table-valued function, but will I have
to admit that I am skeptical that this will have any particular effect.
If you are lucky that these conditions:
WHERE U.UserID IN (SELECT DISTINCT UserID FROM vw_search)
AND UP.PropertyDefi nitionID = 29
filter away a major share of the rows, say 90%, it may be suffcient
to do:
INSERT #temp(UserID, ....)
SELECT U.UserID, U.FirstName + ' ' + U.LastName as Name,
UP.PropertyValu e as Location,
pI.headline as Headline,
i.industryName as Industry,
pI.summary as Summary,
pI.interests
FROM Users U
JOIN UserProfile ON U.UserID = UP.UserID
JOIN professionalInf o pI ON U.UserID = pI.memberId
JOIN industries i ON pI.primaryIndus try = i.industryId
WHERE U.UserID IN (SELECT DISTINCT UserID FROM vw_search)
AND UP.PropertyDefi nitionID = 29
SELECT UserID, Name, Location, Headline, Industry, Summary, interests,
dbo.GetConnecti onsCount(U.User ID) AS Connections,
dbo.GetRecommen dations(U.UserI D) AS Recommendations ,
dbo.fnCommonFri endsStep(U.User ID, 36) AS Degree
FROM #temp
WHERE dbo.fnCommonFri endsStep(U.User ID, 36) >= 0
But if the call to dbo.fnCommonFri endsStep is the major filter, the above
is useless.
It is possible that you could replace the function with a recursive CTE.
No, I am not go to give you a sample, because I don't know your tables,
I don't know your business rules, and I don't have any sample data to
test with. And there are some unfortuate restrictions with recursive
CTEs which makes me uncertain that they can actually do the job.
If that does not help, the only remaining option is to materialise the
result of fnCommonFriends Step to a table with the columns (User1, User2,
Degrees). How to maintain that table when a row is added, deleted or
update in the network table would be a new headache.
In summary, while we are some people out here that knows SQL Server well,
our expertise in the product as such is not sufficient to solve a
performance problem like this. We also need specific problem about
the problem at hand:
o What is the purpose of this query? More generally what is the context
for it?
o How often does a query of this type run?
o How common are updates? Partiularly, how common are updates to the
network table?
o CREATE VIEW for all views involved and CREATE TABLE and CREATE INDEX
for the tables involved, including those referred to by views and
function.
o Rowcounts for all involved tables.
o The query-plan for the query.
o Sample data to test solutions for correctness. (To test for performance
we would need more data that is practical to include a news post.)
Yes, it would take you some effort to compile this information, but
you are asking us to make a community to help you. If you are not
prepared to make that effort, should you really expect us to make any
effort?
--
Erland Sommarskog, SQL Server MVP,
es****@sommarsk og.se
Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx