有关系模式:User(userId, userName), Article(articleId, userId, title, content),Vote(articleId, score),User为用户关系,Article为用户发表的文章关系,Vote为文章得票关系,title为文章标题、score为得票数。
(1)用SQL语言查询所有没发表过文章的用户名;
(2)用SQL语言查询得票数大于100的所有文章标题,按得票数倒序排列;
(3)用SQL语言查询出发表文章数大于5,文章平均得票数大于100的用户名,按平均得票数倒序排列;
(4)设计这些表的主键、外键和索引,并指出上面三个查询所使用的索引。
(5)当用户数超过1000万,文章数超过1亿时,如何考虑存储及性能的改进和优化?
(1)用SQL语言查询所有没发表过文章的用户名;
(2)用SQL语言查询得票数大于100的所有文章标题,按得票数倒序排列;
(3)用SQL语言查询出发表文章数大于5,文章平均得票数大于100的用户名,按平均得票数倒序排列;
(4)设计这些表的主键、外键和索引,并指出上面三个查询所使用的索引。
(5)当用户数超过1000万,文章数超过1亿时,如何考虑存储及性能的改进和优化?
解决方案 »
- 2008使用的是2000的默认实例MSSQLSERVER。这样就会导致2008的一些功能使用报错
- 视图和存储过程有什么区别,什么时候用视图和存储过程
- 问个SQL语句
- 含有字母的字符转化为整型 sql
- XP下安装SQL 2000的问题,老是不成功。急阿急!!!!!
- 用什么工具或SQL语句可以知道存储过程的执行时间啊?
- 请问交叉表问题
- 我的后台是sql server 7.0,现在我想用pb做一个报表,对于sql table 我知道那些字段,但就是不知如何做报表,并且告诉我如何把一个报表牵套在另一个报表中。*******急急急*********
- 最简单的一个问题
- 有关数据库连接问题,急!请大家帮帮忙!我一定会给分的!
- 怎么查看SQL的运行日志。在线等,请指点谢谢
- 放在一个表中,坏处:数据冗余,好处:查询速度快,是这样吗?谢谢大家!
select
*
from
[user] a
where
not exists(select 1 from Article where UserID=a.userId)
或
select
a.*
from
[User] a
left join
Article b on a.userId=b.UserID where b.ID is null
2、
select
a.[title],b.score
from
Article a
join
Vote b on a.ArticleID =b.ArticleID and b.score>100
order by b.Score desc
或
select
*
from
Article a ,Vote b
where a.ArticleID=b.ArticleID and b.Score>100 order by b.Score desc
3、
select
*
from
[User] a
where
(select count(1) from Article where UserID=a.userId)>5
and
exists(select 1 from Article b join Vote c on b.ArticleID=c.ArticleID and b.UserID=a.userId and avg(c.Score)>100)
order by
(select avg(c.Score)>100 from Article b join Vote c on b.ArticleID=c.ArticleID and b.UserID=a.userId ) desc或
----Vote 中的Score 没有时,数量为0的情况下
select
a.UserId,a.userName,avg(c.Score)
as [平均数],count(1) as[文章数]
from
[User] a
left join
Article b on a.userId=b.UserID
left join
Vote c on b.ArticleID=c.ArticleID
where
avg(c.Score) >100
group by
a.UserId,a.userName
having count(1)>5User:UserID 唯一聚集
Article:UserID,ArticleID 创组合索引
Vote:ArticleID 唯一聚集
(select avg(c.Score) from Article b join Vote c on b.ArticleID=c.ArticleID and b.UserID=a.userId ) desc --去掉>100
User:UserID 唯一聚集
Article:UserID,ArticleID 创组合索引
Vote:ArticleID 唯一聚集Article表上为什么要创组合索引,只创ArticleID 索引不行吗?thanks.
大多数都是和userid有强关系
或者说
都是根据userid 来把 Article表 进行group 分组ArticleID 本身应该是自增列吧
因为两列都存在where中,有覆盖索引理论上会快,
分别建索引,会扫描两次