自己对sql的理解。用一句俗话说:人有七窍,已经通了六窍,有没有童鞋指点一下
问:关系模式: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 select * from User where useid not in(select userid from Article);
2 select title from article inner join vote on article.articleid=vote.aritcleid and vote.score>100 order by vote.score asc;
3有点不太会,下面胡乱乱写了一通
3 select * from user where userid in(select userid from Article inner join vote on article.articleid = vote.articleid group by userId having avg(score)>100) group by userid having count(*) >5;
4主键外键应该很简单,索引第一个应该是userid,第二个是articleid 和score,第三个应该是articleid和 userid
5用户数按照id分割分布式存储,文章类似,还可以用读写分离等策略水平扩展数据库.