MySQL 按日期分表

一、表不存在时则创建

  之前做项目实在是太赶了,很多东西都没记录。是时候补回来了

  MySQL做一个大表,由于要存历史记录,所以数据量很大,查询很慢。恰好查询的时候,又不需要时间太久的冷数据。现在将其实现原理提取成一个控制台小程序。

  首先,创建一个简单的数据库访问类。

    public static class CommonDao
    {
        private static MySqlConnection conn = new MySqlConnection(ConfigurationManager.AppSettings["DB"]);        //创建连接

        /// <summary>
        /// Insert Update Delete语句的执行
        /// </summary>
        /// <param name="SQL">SQL语句</param>
        /// <returns>返回影响行数</returns>
        public static int ExecuteNonQuerySQL(string SQL)
        {
            MySqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = SQL;
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            int Count = cmd.ExecuteNonQuery();
            conn.Close();
            return Count;
        }
    }

  由于是按分钟分表,所以写个定时器,每一分钟往里面插入5条数据:

        static void Main(string[] args)
        {
            //每分钟执行一次,插入5条数据
            Timer t = new Timer(60000);
            t.Enabled = true;       //到达时间就执行一次,或者是持续执行
            t.AutoReset = true;     //一直执行

            t.Elapsed += (sender, eea) =>
            {
                for (int i = 0; i < 5; i++)
                {
                    DateTime dt = DateTime.Now;
                    string TableName = "person" + dt.ToString("mm");
                    string sql = "INSERT INTO " + TableName + " VALUES(null,‘superman‘,‘" + dt.ToString("yyyy-MM-dd HH:mm:ss") + "‘)";
                    try
                    {
                        CommonDao.ExecuteNonQuerySQL(sql);
                    }
                    catch (Exception e)
                    {
                        MySqlException ex = e as MySqlException;
                        //1146的代号就是表不存在的错误
                        if (ex.Number == 1146)
                        {
                            //如果表不存在,则先创建这个表
                            string SQLCreateTable = "CREATE TABLE " + TableName + " LIKE person";  //从模板表来创建新表,这样的好处是索引、自增什么的可以一次性建好
                            CommonDao.ExecuteNonQuerySQL(SQLCreateTable);
                        }
                    }
                }

            };

            Console.ReadKey();
        }

  第一张Person模板表的格式如下:

CREATE TABLE `person` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) DEFAULT NULL,
  `OperateTime` datetime DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  

  于是就每分钟都会创建表并添加数据。

  

二、分表后跨表查询的问题

  分表后有很多问题要处理,简单做两个,maybe会有其他问题。

  1、数据在哪个表里;

  2、数据跨表了,那么就需要表连接;

时间: 2024-10-26 02:01:21

MySQL 按日期分表的相关文章

MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计?

MySQL优化分库分表,为什么要分表,分表以后如何进行排序查询,业务如何设计? 昨天面试新人的时候,遇到了这么一个问题,按照自己的想法大体聊了一些,但大多是感性的,并没有完整的了解why and how. 今天查了一些相关的资料,包括<MySQL性能调优与架构设计>.<高性能Mysql>,慢慢的整体理解,请大家指正. 之一,为什么要分表? 分表,按形式,有水平分表和主附分表.水平分表常见于按ID取模或者按日期将相同表结构的内容散列到不同的表上,主附分表常见于有对应关系的多张表,通过

16、MySQL数据库分库分表备份脚本

MySQL数据库分库分表备份脚本 ===================学员分享分库分表========================== 脚本单双引号的区别: 单引号是强引用,强制输出是所见即所得. 双引号是解析变量 和 多个字符串.数字等连接一个字符串 条件1  ||    条件2                      或   假真   真假 条件1 && 条件2                      并   真真    假假 !条件1  && 条件2    

数据库mysql 自动分库分表备份脚本

数据库mysql 自动分库分表备份脚本 当我们在公司中遇到数据库的备份,项目比较多,经常进行数据库和表的添加工作,那么我们 想要让系统脚本自动进行查询数据库里的库和表结构,然后进行自动的定期进行数据库和表的定期份, 那么我们该如何实现呢,大家看看以下的脚本: vi mysql_backup.sh #!/bin/sh #backup tiandao bbs edoing #coding tonye.li MYUSER=root MYPASS=meidi SOCKET=/data/3306/mysq

MyBatis实现Mysql数据库分库分表操作和总结

阅读目录 前言 MyBatis实现分表最简单步骤 分离的方式 分离的策略 分离的问题 分离的原则 实现分离的方式 总结 前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处理的地步.这时仅仅一张表的数据就已经超过了千万,无论是查询还是修改,对于它的操作都会很耗时,这时就需要进行数据库切分的操作了. MyBatis实现分表最简单步骤 既然文章的标题都这么写了,不如直接上干货来的比较实际,我们就先来看看如何实现最简单的分表. 1.我们模拟用户表数

MySQL订单分库分表多维度查询

转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询 MySQL分库分表,一般只能按照一个维度进行查询. 以订单表为例, 按照用户ID mod 64 分成 64个数据库.按照用户的维度查询很快,因为最终的查询落在一台服务器上.但是如果按照商户的维度查询,则代价非常高.需要查询全部64台服务器.在分页的情况下,更加恶化.比如某个商户查询第10页的数据(按照订单的创建时间).需要在每台数据库服务器上查询前100条数

MySQL性能优化:分表、增量备份、还

对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻辑上可以划分.一个好的划分依据,有利于程序的简单实现,也可以充分利用水平分表的优势.比如系统界面上只提供按月查询的功能,那么把表按月拆分成12个,每个查询只查询一个表就够了.如果非要按照地域来分,即使把表拆的再小,查询还是要联合所有表来查,还不如不拆了.所以一个好的拆分依据是 最重要的.关键字:UNION 例: 订单表根据订单

mysql分区和分表

mysql分表和分区 1.mysql分表 什么是分表? 分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件.如果是Innodb存储引擎,索引文件和数据文件存放在同一个位置.这些表可以分布在同一块磁盘上,也可以在不同的机器上. app读写的时候根据事先定义好的规则得到对应的的表明,然后去操作它. 将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法(如用hash的方式,也可以用取余的方式)

mysql大数据分表记录app用户的坐标数据

最近提到一个需求.需要记录app用户在使用app中的移动轨迹,即坐标值.每分钟上传一次XY坐标,有点类似跑步软件的描线轨迹. 不考虑app如何获取,反正api只要接受到坐标数据 就记录下来保存到数据库.接口接收3个参数X,Y,uid 1,建个新库.test 无论你是云DB还是同服务器下都可以 1 'DB_CONFIG2'=>array( 2      'db_type'=>'mysql', 3      'db_user'=>'root', 4      'db_pwd'=>'',

关于Mysql分区和分表

[分区概念]分区就是把一张表的数据按照一定的规则分成多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上.分区后表还是一张表.分区根据一定的规则把数据文件和索引文件进行了分割,还多出了一个.par文件,打开.par文件后你可以看出这张表的分区信息. [分区好处]突破磁盘的I/O瓶颈,从而达到提高mysql性能的目的.便于表的维护管理,不需要修改程序代码. [分区方法]根据分区策略创建或修改表时对表数据进行分区(分区策略多样,实现容易) [分表概念]分表是真正的分表,一张表分成很多表后,每一