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

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

举个例子:假如对1000w的数据进行count操作,需要10秒,而我把1000w的数据分到10张表中,单独对每张表进行查询只要1秒,如果我查完一张表再查另外一张表查完10张表的时间还是为10秒,而如果我同时对10张表进行查询,再处理10个count结果,那么时间最多只要1秒多一点,请问mysql有没有实现这个功能的方法或者各位有没有什么好的建议?(count操作只是举例而已)
...全文
2351 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
没人知道吗

56,875

社区成员

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

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