数据库进行分表或分区以后的查询问题

leiwuhen2011 2012-04-26 01:50:50
现在有表的大约有1000w左右,而且以后会持续增加,而且是innodb表,由于对表进行一些全表查询的时候速度较慢,因此决定对表进行分区或者分表。

举个例子:假如对1000w的数据进行count操作,需要10秒,而我把1000w的数据分到10张表中,单独对每张表进行查询只要1秒,如果我查完一张表再查另外一张表查完10张表的时间还是为10秒,而如果我同时对10张表进行查询,再处理10个count结果,那么时间最多只要1秒多一点,请问mysql有没有实现这个功能的方法或者各位有没有什么好的建议?(count操作只是举例而已)
...全文
2330 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
leiwuhen2011 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

没有查询数据客户端都要向服务器请求数据了,这样很耗费服务器的资源的。
如果只请求一次那么他的效率还是相对要高的。
[/Quote]

额,如果服务器中的数据一直在增加,但是我前台一旦有要求获得某个表中此时有多少条数据(只是举例),那么我必须到服务器中去请求数据啊
Rotel-刘志东 2012-04-27
  • 打赏
  • 举报
回复
没有查询数据客户端都要向服务器请求数据了,这样很耗费服务器的资源的。
如果只请求一次那么他的效率还是相对要高的。
leiwuhen2011 2012-04-27
  • 打赏
  • 举报
回复
嗯,我知道这样做是不会有时间区别的,但是那是在单线程的情况下,如果是在多线程的情况下,我只能说,肯定比单个表查询速度快多了,我的所谓快,是包括从客户端请求到客户端显示的整个时长
Rotel-刘志东 2012-04-26
  • 打赏
  • 举报
回复
从查询结构来看一个表的查询,一定是快于10表的查询了。
Rotel-刘志东 2012-04-26
  • 打赏
  • 举报
回复
向楼主说的是不会有什么区别的,1000w数据在一个表中查询时需10s,做了分区后10表
每个表的查询需1s,总共查询10s,这不是一样的查询时间,没有任何区别。
leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用我并行查10表那么就只会花费掉一秒钟,你做过测试吗? 不要想当然。你的操作系统如果不支持多核,或者你的MYSQL没有配置多线程。 最终的所有操作仍然是你的CPU在一个时刻,只要执行一个操作。


具体的分析,需要看你的表结构及具体的查询语句。 但仅以你目前的例子看。

select count(*) from tableX
肯定是比10个分别的 select count(*) f……
[/Quote]

你的思路一直停留在单线程处理count方法上面,那么时间长度就是10次count时间的和,这样做完全没有必要进行分表操作,而我是用多线程进行count操作,意味着时长就是10次count操作中的最长的拿一次count的时间+进行逻辑操作sum所有count的时间

leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
我当然有做过测试啊
ACMAIN_CHM 2012-04-26
  • 打赏
  • 举报
回复
[Quote]我并行查10表那么就只会花费掉一秒钟,[/Quote]你做过测试吗? 不要想当然。你的操作系统如果不支持多核,或者你的MYSQL没有配置多线程。 最终的所有操作仍然是你的CPU在一个时刻,只要执行一个操作。


具体的分析,需要看你的表结构及具体的查询语句。 但仅以你目前的例子看。

select count(*) from tableX
肯定是比10个分别的 select count(*) from table1, select count(*) from table2, 要快。
leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

如果你10个表都要查,则不管如何分,效果仍是一样,总共的时间仍然是10秒。

最好能够举一个比较接近实际的例子以方便别人理解问题。
[/Quote]
怎么可能时间任然是10秒,我并行查10表那么就只会花费掉一秒钟,再对10个表的结果集进行统计,怎么可能还会要10秒钟呢


我执行一条Sql语句操作1000w条数据要10秒,我把表分成10张,每张100W,这条语句单独查一张表只要1秒,我使用10个线程分别对各个表进行查询,此时只会花费1秒,查询结果再进行一次统计时间肯定会小于10秒的,我的问题就是,mysql有没有这样的实现呢
ACMAIN_CHM 2012-04-26
  • 打赏
  • 举报
回复
如果你10个表都要查,则不管如何分,效果仍是一样,总共的时间仍然是10秒。

最好能够举一个比较接近实际的例子以方便别人理解问题。
leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 2 楼 的回复:

而如果我同时对10张表进行查询,再处理10个count结果,那么时间最多只要1秒多一点,


那是因为你可能数据已经都再内存了
[/Quote]

数据怎么会都在内存中了呢,数据不是还是放在数据库里面吗
rucypli 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

而如果我同时对10张表进行查询,再处理10个count结果,那么时间最多只要1秒多一点,
[/Quote]

那是因为你可能数据已经都再内存了
leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
顶上去
leiwuhen2011 2012-04-26
  • 打赏
  • 举报
回复
没人知道吗
本课程深入MySQL 分库分表各个环节,2023年最新课程。每个章节都会以原理深入+实际案例进行讲解。内容数据库安装,主从同步,和分表分表详解和对应的应用场景及注意事项MySQL在金融互联网行业的企业级安装部署1 安装方式2 安装用户3 目录规范4 操作系统配置5 创建用户6 创建目录7 安装8 配置文件9 安装依赖包10 配置环境变量11 初始化数据库12 重置密码 主从复制,gtid,并行复制_半同步复制_实操案例_常用命令_故障处理1 主从复制原理深入讲解2 主从复制相关参数3 主从复制架构部署4 从库状态详解5 过滤复制6 什么是GTID?7 GTID主从配置8 gtid维护9 GTID的特点10 工作原理11 gtid相关状态行和变量 MySQL分库分表目录章节1.MyCAT分布式架构入门及双主架构1.1 主从架构1.2 MyCAT安装1.3 启动和连接1.4 配置文件介绍2.MyCAT读写分离架构2.1 架构说明2.2 创建用户2.3 schema.xml2.4 连接说明2.5 读写测试2.6 当前是单节点3.MyCAT高可用读写分离架构3.1 架构说明3.3 schema.xml(配置)3.4 文件详解3.4.1 schema标签3.4.2 table标签3.4.3 dataNode标签3.4.4 dataHost3.4 读写测试3.5 故障转移4.MyCAT垂直分表4.1 架构4.2 新建表4.3 配置mycat4.4 验证6. MyCAT水平分表-取模分片取模分片7. MyCAT水平分表-枚举分片枚举分片字符枚举配置执行计划的分析8. MyCAT全局表与ER表全局与ER表8.1 全局表8.1.1 特性8.1.2 建表8.1.3 配置8.1.4 验证8.1.5 分析总结(执行计划)8.2 ER表8.2.1 特性8.2.2 建表8.2.3 配置8.2.4 测试验证,子表是否跟随父表记录分片8.2.5 分析总结(执行计划)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧