现在有表的大约有1000w左右,而且以后会持续增加,而且是innodb表,由于对表进行一些全表查询的时候速度较慢,因此决定对表进行分区或者分表。举个例子:假如对1000w的数据进行count操作,需要10秒,而我把1000w的数据分到10张表中,单独对每张表进行查询只要1秒,如果我查完一张表再查另外一张表查完10张表的时间还是为10秒,而如果我同时对10张表进行查询,再处理10个count结果,那么时间最多只要1秒多一点,请问mysql有没有实现这个功能的方法或者各位有没有什么好的建议?(count操作只是举例而已)

解决方案 »

  1.   

    怎么可能时间任然是10秒,我并行查10表那么就只会花费掉一秒钟,再对10个表的结果集进行统计,怎么可能还会要10秒钟呢
    我执行一条Sql语句操作1000w条数据要10秒,我把表分成10张,每张100W,这条语句单独查一张表只要1秒,我使用10个线程分别对各个表进行查询,此时只会花费1秒,查询结果再进行一次统计时间肯定会小于10秒的,我的问题就是,mysql有没有这样的实现呢
      

  2.   

    你做过测试吗? 不要想当然。你的操作系统如果不支持多核,或者你的MYSQL没有配置多线程。 最终的所有操作仍然是你的CPU在一个时刻,只要执行一个操作。
    具体的分析,需要看你的表结构及具体的查询语句。 但仅以你目前的例子看。select count(*) from tableX
    肯定是比10个分别的 select count(*) from table1, select count(*) from table2, 要快。
      

  3.   


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

  4.   

    向楼主说的是不会有什么区别的,1000w数据在一个表中查询时需10s,做了分区后10表
    每个表的查询需1s,总共查询10s,这不是一样的查询时间,没有任何区别。