免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 18609 | 回复: 11
打印 上一主题 下一主题

分表以后的查询要怎么做? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-04 20:14 |只看该作者 |倒序浏览
本帖最后由 my997559 于 2010-02-04 20:16 编辑

我现在有一张800W记录的表,因为历史数据几乎不会进行修改,只是最后的几千条数据需要修改,所以我想分表.如果我按以下方式
按时间分
0    - 7天   A表
7天 - 1月   B表
1月 - 3月   C表
3月以前      D表
如果我这样分了以后,在查询上虽然可以用 select * from (select * from A union select * from B union select * from C union select * from D) m order by id
但是这样的话,在不带条件或符合条件的查询比较多的情况下,会消耗比较多的资源.想请教大家有没有什么好的查询方式推荐吗?

我设想的查询方式是,程序员只写出select * from A order by id desc limit 15,20,然后程序就会自动去查B,C,D里的符合条件的内容,并最终返回正确的结果.

所带的条件可能不多,但是我想做成通用的,就是说其它的表可能也会到,所以在查询里不能写死.

小生先在这里谢了!

论坛徽章:
0
2 [报告]
发表于 2010-02-04 21:03 |只看该作者
可以用视图试下。分库分表有好处也有坏处的,就是逻辑变复杂!
不过像你这样800W的表,不用分表的。建好索引查询应该没问题的

论坛徽章:
0
3 [报告]
发表于 2010-02-05 09:09 |只看该作者
回复 1# my997559


    同意楼上的,如果表不断增长的话,也建议考虑建立history表,

论坛徽章:
0
4 [报告]
发表于 2010-02-05 16:56 |只看该作者
多谢哈,mysql的视图不敢用,这样的表结构一查就会建立临时表,所以不打算用视图.
之所以要分表,是因为800W的更新比较慢,所以才需要修改...

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
5 [报告]
发表于 2010-02-06 19:11 |只看该作者
多谢哈,mysql的视图不敢用,这样的表结构一查就会建立临时表,所以不打算用视图.
之所以要分表,是因为800W的 ...
my997559 发表于 2010-02-05 16:56



    5.1 里面针对视图的优化,做的相对好了一点,用不到的表就不会去加载。
简单的说,可以尝试一下

论坛徽章:
0
6 [报告]
发表于 2010-02-06 22:59 |只看该作者
建立个历史表现状表喽,这样查的快点

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
7 [报告]
发表于 2010-02-07 17:47 |只看该作者
写个存储过程,接收参数也不错

论坛徽章:
0
8 [报告]
发表于 2010-02-11 11:33 |只看该作者
如果是myisam的表,可以建个merge表

论坛徽章:
0
9 [报告]
发表于 2010-02-11 14:03 |只看该作者
mysql的视图  --------不支持子查询  速度慢

800W记录的表, 没有必要
1亿的大表在mysql哦都用过  
这个表并不大   分太细导致总查询慢

推荐适用临时表
总表不变
之后建立若干临时表    如果只是查询部分数据用临时表
如果查询总数据   用总表

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
10 [报告]
发表于 2010-02-24 15:52 |只看该作者
如果按月做分区,数据量有多大?
还有你的逻辑要更新多久天数以内的数据呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP