首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教一下sql 语句如何优化

2013-09-13 
请问一下sql 语句怎么优化?请问各位这条sql 语句要怎么优化,数据量大小依次为 ProductInfo,Users,ProRec,

请问一下sql 语句怎么优化?
请问各位这条sql 语句要怎么优化,数据量大小依次为 ProductInfo,Users,ProRec,三表之间的关系:ProductInfo 引用Users 表的id,Prorec引用ProductInfo 的id,现在查询的时候很慢。数据量也很大。请教一下各位要怎么优化一下如下的sql语句

select top 9 pr_id,pr_pid,pr_title,pr_indus1,pr_indus2,pr_indus3,pr_ptype,pr_priceset,pr_isspot,pr_commend,pr_sort,pr_addtime,
pr_daynum,pr_status,user_username from ProRecommend inner join ProductInfo on product_id=pr_pid inner join UsersInfo 
on user_id=product_usernumber
SQL 性能优化 select 行业数据
[解决办法]
在连接字段加上索引
[解决办法]
有RID查找(覆盖索引)和表扫描,可以在这两个表上建立主键看看性能会不会提升。
[解决办法]
索引不恰当,都出现RID查询了。
[解决办法]
实际查询时,应该通常有加where [条件]的吧?

在where [条件]的字段上建索引.
[解决办法]
这个没有任何条件,只有top9
那么最外层的的表肯定要用到表扫描,在表扫面的那个表上建立索引是没有意义的
出现RID查找是因为usersinfo上没有主键,可以创建主键

如果表ProRecomend中有的数据在和productinfo,userinfor关联时都有数据,那么就可以
先把top9选出来放在表变量中,之后再做关联查询,否则会出现,关联不到productinfo和usersinfo的数据

[解决办法]
--你的执行计划中没有TOP啊?
SELECT TOP 9
        pr_id ,
        pr_pid ,
        pr_title ,
        pr_indus1 ,
        pr_indus2 ,
        pr_indus3 ,
        pr_ptype ,
        pr_priceset ,
        pr_isspot ,
        pr_commend ,
        pr_sort ,
        pr_addtime ,
        pr_daynum ,


        pr_status ,
        user_username
FROM    ProRecommend c--pr_pid不是主键? 建立一个pr_pid非聚集索引
        INNER JOIN ProductInfo a--product_id不是主键? 建立主键或非聚集索引
ON a.product_id = c.pr_pid
        INNER JOIN UsersInfo b
ON b.user_id = a.product_usernumber


[解决办法]
select top 9 pr_id,pr_pid,pr_title,pr_indus1,pr_indus2,pr_indus3,pr_ptype,pr_priceset,pr_isspot,pr_commend,pr_sort,pr_addtime,
pr_daynum,pr_status,user_username from ProRecommend inner join ProductInfo on product_id=pr_pid and ProductInfo.字段=xxx值 inner join UsersInfo 
on user_id=product_usernumber

热点排行