有2个表,
works,单位名称表,表结构如下
works_id int(10) primary key  #单位ID
works_name varchar(10)        #单位名称
此表约20万条记录product,单位的产品表,表结构如下
product_id int(10) primary key  #表ID
product_works int(10)           #单位ID
product_name varchar(100)       #单一产品名称
此表约300万条记录
两个表通过单位ID来关联
在考虑程序执行效率的前提下,现在需要做如下输出,每页50条记录例如:
序号        单位名称            产品总数
1            中国移动             共计3款产品
2            奇瑞汽车             共计10款产品
3            联合利华             共计22款产品
.
.
.
.
请问各位达人有什么好的思路么

解决方案 »

  1.   

    补充:
    works表还少了个字段
    works_address varchar(10) #单位所在省份求省份是'北京'的记录,其他条件不变
      

  2.   

    select * from product left join works on (works_id = product_works) where works_address = '北京' limit 50;orselect * from product left join (select * from works where works_address = '北京') as tmpworks on (works_id = product_works) where 1 limit 50;估计第二个会比较好.
      

  3.   

    这个题比较有代表性可以发mysql版看看http://forum.csdn.net/SList/MySQLPostgresql/
      

  4.   

    没看错的话,就是统计产品表的记录数,通过单位ID来分组SELECT w.works_name,…… ,count(p.product) AS num FROM works AS w LEFT join product AS p on p.product_works=w.works_id WHERE 1 group by p.product_works LIMIT ……
      

  5.   

    我在一台VPS上试,不过我的表记录才180万=========相当于考官出的产品表名称对应的表比较小,2万不到,相当于题目的单位名称表。搜索50条记录自写php代码,用时0.00254781036377我认为用连接完全可以接受。如果非要提升效率,我想也就在冗余字段了。不过这种利弊也很明显至于说摇头回去想想,考官有些问题吧?表的主要用途也没说,而且数据规模才几百万而已。又不是每天增加几百万
      

  6.   

    这个题还是有很看点的一是数据量:20万*30万二要求浏览量和并发三。要求有count(分页)四、分类统计和排序五、表联结效率六、单条查询还是分散查询考题强调了一个执行效率,感兴趣的可模拟看一下。这个数据量的规模是中型商务网站的规模。
      

  7.   

     你这样做的话,其实效率不低,你试下就知道了,首先分页20w的数据很快就能显示50 select count是所有查询中最快的,如果做索引的话,就更快了,这真不是什么海量数据.
      

  8.   

    复合索引,根据实际情况优化。牺牲insert,update,尽可能提高select速度
      

  9.   

    SELECT w.works_name, count(p.product) AS num FROM works AS w LEFT join product AS p on p.product_works=w.works_id group by p.product_works LIMIT 0,50 估计是这样吧