我现有一张表,字段有5,用于存储用户访问请求信息,主要有ID(主键,自增),URL,时间,IP;其中URL字段内容长度较长,其余的都比较短;现在该表里有13亿条数据,光是"select count(id) from visit_info;"就需要10分钟,请问有什么好的方案来解决这个问题,服务器是独立的(服务器配置为8CPU,16G内存,硬盘是5T做了RAID的阵列).这个数据表以后需要做很多复杂的查询,按照这个速度绝对不是办法,求大家给个方案,小弟不胜感激啊!  若将数据库做集群该怎么做?大牛们请帮帮忙啊!

解决方案 »

  1.   

    补充一点,数据库引擎是用的INNODB,如果采用和内存数据库共存的方式,他们应该是如何工作的,希望可以给个明示,先谢谢各位了!
      

  2.   

    感觉分区表应该能解决,你试一下,看哈效果如何,不行可以试一下master-slave
      

  3.   


    1:表设计时,选择正确的字段类型,对varchar这样的,选择长度不要太大方
    2:对于count(*) from tablename这样的查询,MYISAM和INNODB不同的实现方式,MYISAM会很快。如果你是ID是严格自增的,那么COUNT(*)=MAX(ID).
    3:很多复杂的查询,这样就需要高超的索引技术了。可以尝试进行分区,按照ID做HASH分区。
    4:URL字段比较长,可以拆分到另外一个单独的表,用ID和源表关联。