转贴一下php里的贴子,各位大侠给看看有2个表,
works,单位名称表,表结构如下
works_id int(10) primary key #单位ID
works_name varchar(10) #单位名称
works_address 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款产品二、求省份是'北京'的记录,其他条件不变
请问各位达人有什么好的思路么原贴:
http://topic.csdn.net/u/20101202/22/47926f7b-7a13-4bf0-91cf-8738ff10667a.html?seed=1032264418&r=70319483#r_70319483

解决方案 »

  1.   

    没什么好办法,确保 product_works , works_address上创建索引。
      

  2.   


    思路是 如何写高效的sql吗?还是别的?
      

  3.   


    总的来说,先要加2个索引:
    (1)works,单位名称表上为字段product_name、works_id建一个联合索引。
    (2)product,单位的产品表上为product_works字段加索引。1,先在表 product上,通过product_works(单位id)分组,求出单位产品数,然后再关联works表,求出单位名称。
    select w.works_name, a.num
    from( select produmct_works , count(1) num from product ) a, works w
    where a.produmct_works  = w.works_id;
    -- 不知道mysql里面的伪列数字1、2、3.....如何取得?2,跟第一个类似,不过加了一个条件而已。
    select w.works_name, a.num
    from( select produmct_works , count(1) num from product ) a, works w
    where a.produmct_works  = w.works_id and w.works_address='北京';
    最后,如果还是不行的话,就在product上加冗余字段了。
      

  4.   

    一 是数据量:20万*300万二 如果求要求一定浏览量和并发(如京东这样的电子商务)三 要求有count(分页)四 读多写少五 联表查询还是分散查询考题强调了一个执行效率。这个数据量的规模是中型商务网站的规模。如果是DBA,这个该如何建议?