ON b.id1=a.id1 
AND b.id2=a.id2 
WHERE b.txt=:d1 
AND a.txt=:d2 
楼主的查询中除了最后ORDER之外,似乎根本与 date 无关。 按照日期进行分区似乎没什么意义。

解决方案 »

  1.   


    斑竹大人,除了查询以外,date的作用是用作删除2个月前的记录mysql_query("DELETE FROM table WHERE date < ".strtotime('-2 months')); 22.6GB的表,(数错了,总共1.2亿条记录,一天大概200万条),删除的话,非常耗时耗资源,而且还会造成死机。显然表的体积太大,不合理。试过了,复制一个表,然后TRUNCATE,大概1秒多1点就搞定,所以想是不是应该分表?但是不知道分表后查询语句该怎么写?
      

  2.   


    分完后怎么查询呢?SELECT * FROM 
    table1 a JOIN table2 b JOIN table3 c JOIN table4 d ...如果按日分,2个月62个表要写62遍JOIN?分表后查询完全不懂。请教了。
      

  3.   

    可以安月份分表 一月份的操作table1----------二月份的操作 table2  。以此类推,删除时 直接用truncate table
      

  4.   

    对,我想问的是query语句,如果已有60个表,要查询这60个表的数据,用
    SELECT * FROM 
    table1 a JOIN table2 b JOIN table3 c JOIN table4 d JOIN table5 e 手写60遍join?
      

  5.   

    分表写60个join不可能的,太恶心了。跨分表查询的话你就要设计一套汇总表。
    我有类似的经验,希望能帮到你:
    一天200W记录,一个月就6000W,按月分差不多了。
    然后有跨月查询的业务的话,你就设计汇总表,看你业务需求了,你可以按月汇总,按天汇总,这样可以解决跨表查询的问题。
    如果有跨表查询明细的话最蛋疼了。我看你到的表结构是没有主键的,业务允许的话,这样可以分区,分表+分区结合起来,很快的。具体怎么操作就要看业务需求了。
      

  6.   

    还有,删除 的话,如果有分区,那是so easy的事。直接删除那个分区就OK
      

  7.   


    大大,怎么完成这样的数据表及查询?还是不懂,有没有实例或教程?
    比如给些代码CREATE TABLE `tablename`(
      `id` int(9) NOT NULL AUTO_INCREMENT,
    ...
    );
    select * from `tablename`就是不知道这样的表,SQL语句到底是什么样子的?是innodb还是myisam或者别的? 谢谢。
      

  8.   


    数错了,总共1.2亿条记录,一天大概200万条。
    存储当然没问题,就如我说的,22.6GB数据,查询平均只需0.4秒,但是由于我的表需要频繁的更新(INSERT,SELECT,DELETE),现在我头痛的是DELETE那一块。硬盘不允许每天新增200万条记录而不删除。而且业务也不需要保存2个月以上的记录。怎么删的快?分别只是我想到的一点,因为 TRUNCATE table 小于1秒,但
    DELETE FROM table WHERE date < ".strtotime('-2 months') 根本就跑不动(一句语句删除200万条记录,即使date加了index)
      

  9.   

    “硬盘不允许每天新增200万条记录而不删除。而且业务也不需要保存2个月以上的记录。怎么删的快?分别只是我想到的一点,因为 TRUNCATE table 小于1秒,”
    1.如果不需要跨天查询的话,考虑每天一张表。默认drop62天前的表,估计需要调整相应的业务逻辑。
    2.每月一张表,200w*31=6200w,drop一张大表,如果是innodb的表,需要考虑全局独占锁。
    3.同样啊,一天一个分区?一个月一个分区?叶金荣,吴炳锡两位大牛好像不怎么建议用MySQL的分区表,具体的欢迎各位拍砖。
    4.分库?这个思路没有怎么想清楚啊,楼主可以试着想想看。
      

  10.   

    数据太大,估计你写入都会很慢,建议如下优化
    1,数据分表,1天一张,或者做分布式存储,比如PostgreSql,把数据按一定规则分布多台数据库中
    2,删除掉所有索引,更新索引对于大数据表很恐怖
    3,写入数据时,使用缓存池,比如优先装入:redis集群,缓存池后,每100条写一次,减少频繁访问IO
    3,把数据装载到中间件,增量索引
    4,查询数据的时候中间件,比如hadoop + lucene +solr  可以参考这个:http://download.csdn.net/detail/longkeyy/6975015给个参考,我之前一个项目,数据量4亿多行,字段10几个,占硬盘800G,写入没死过,翻页查询1秒左右