现需要改进设计一个数据库,里面最主要的存储对象是用户,用户地区,用户喜欢的频道
一个用户表
User
ID| userName| password|...
....
8888887 '小海的家' '密码'
....
数据约1000w行用户所在地区表,数据格式
Id| location| pid
北京
  海淀区
  朝阳区
  西城区
  ....
上海
  长宁区
  ....
河北
  石家庄
  保定
  ...
数据约400行用户喜欢的频道表
Id| name| pid
生活
  情感专区
  图片
  美食
  ...
亲子
  儿童
  儿歌
  胎教
  ...
军事
  欧美各国
  东南亚
  ...
数码
  手机
  笔记本
  ....
数据约300行需求就是
通过地区可以找到喜欢频道的喜欢用户
一级:例如可以查询北京地区各个频道的喜欢用户(生活【情感专区,图片,美食】)
二级:例如可以查询北京海淀区各个频道的喜欢用户(生活【情感专区,图片,美食】)
通过喜欢的频道可以查到各个地区的喜欢用户
一级:例如通过生活频道可以查到省,直辖市喜欢的用户(北京,河北)
一级:例如通过生活频道可以查到海淀区,朝阳区喜欢的用户(北京【海淀区,朝阳区】,河北【石家庄】)提示:
一个用户可以喜欢多个频道,所以用户和频道表是一对多的关系之前使用一对一关系,将地区表,频道表字段ID都存在用户表中,
ALTER TABLE `user` ADD INDEX (地区id,频道id ) 
做复合索引,即使数据量在1000w也可以查询时间低于0.05秒;但是不满足二级结构存储的需求,和一对多的关系现在的需求复杂,请教各位高手怎么设计这样的表,索引如何添加

解决方案 »

  1.   

    mysql存个1亿都没有问题,insert效率变化不到,但是select 的性能会下降很多
    select id,name from userName limit 5000000,10; 
    时间一般是10秒左右
      

  2.   

    千万级的,mysql还能扛。
    1 。关键是建立索引
    2 。以及my.cnf里设置足够多的内存。
    3 。cron程序每天晚上3:00左右OPTIMIZE一下数据库,并且重启一下。 
      

  3.   

    1、mysql数据库复制读写分离。
    2、数据库一定做负载均衡。
    3、另外对索引的处理要得当,不是所有的都创建索引的。
      

  4.   

    谢谢各位
    我想先建建索引再说,mysql其实千w的查询也可以优化到0。01秒再等高人出现,指点表设计