sql server - Is there a more efficient way to write this SQL query? -


i have table couple million records in stores product views sessionguid (visitor), table structure is:

id (pk) sessionguid (uniqueidentifier) productid (int) datetime (datetime)

the purpose of query return list of product id's viewed same people viewed specific product id (ie, customers looked @ x looked @ y)

the query i'm using follows:

select a.productid visitor_sessions_productviews a.sessionguid in (select distinct sessionguid visitor_sessions_productviews productid = @productid) group a.productid order count(a.productid) desc 

is there more efficient way write using group by/having/partiton or other more optimized method of getting data way need it?

i running sql 2008 on dev server, running sql azure when goes live.

often, exists more efficient in:

select a.productid visitor_sessions_productviews exists (select 1               visitor_sessions_productviews b               b.productid = @productid ,                     a.sessionguid = b.sessionguid              ) group a.productid order count(a.productid) desc; 

for best performance, want index on visitor_sessions_productviews(sessionguid, productid) , perhaps visitor_sessions_productviews(productid).

edit:

you try writing using window functions, i'm not sure performance better:

select productid (select pv.*,              sum(case when productid = @productid 1 else 0 end) on (partition sessionguid) cnt       visitor_sessions_productviews       ) pv cnt > 0 group productid order count(*) desc; 

i'm not sure performance better exists method.


Comments

Popular posts from this blog

node.js - Using Node without global install -

How to access a php class file from PHPFox framework into javascript code written in simple HTML file? -

java - Null response to php query in android, even though php works properly -