账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mysql 聊天记录按用户分表后如何做到每个表进行按时间自动分区
    • 2019-09-29 00:00
    • 11
    38
    0

    RT;
    每个用户有一个自己的聊天记录表;
    这个表每天分区;
    假设目前用户量10W,分区的时间都是到10.1;
    现在还有2天时间 如何给这些表创建分区。

    之前的方案是查询的时候自动创建,发现有高并发请求的问题,要么明明查询了information_schema表再创建的分区但还是提示重复创建分区;要么就是加了redis检测后再创建,发现redis写入了,但分区创建失败。
    所以现在想改成定时任务。

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 淡定454 普通会员 1楼

      在MySQL中,您可以使用视图(View)来实现按用户分表后的时间自动分区。视图是一组数据的逻辑表示,它将一个或多个表的记录组织成一个统一的视图,该视图可以被查询和操作。以下是创建视图的步骤:

      1. 在MySQL中,创建一个视图。假设您有一个名为user_orders的表,其中包含用户的订单信息,您可以使用以下命令创建一个视图:

      sql CREATE VIEW user_orders_view AS SELECT * FROM user_orders

      1. 创建用户表。假设您有一个名为users的表,其中包含用户的详细信息,您可以使用以下命令创建一个用户表:

      sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, age INT NOT NULL );

      1. 在视图中,您可以使用SELECT * FROM users来查询所有用户的详细信息。

      2. 创建分区表。为了实现按时间自动分区,您可以使用PARTITION BY子句。假设您有一个名为user_orders的表,其中包含用户的订单信息,您可以使用以下命令创建一个分区表:

      sql CREATE TABLE user_orders_part ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, order_date DATE, FOREIGN KEY (user_id) REFERENCES users(id) );

      在这个例子中,user_orders_part表将被分成多个分区,每个分区代表一个特定的时间段,例如过去的一天或一周。

      1. 在视图中,您可以使用PARTITION BY子句来根据时间自动分区。例如,您可以创建一个视图,该视图按用户ID对用户订单进行分区:

      sql CREATE VIEW user_orders_view PARTITION BY user_id SELECT * FROM user_orders

      这样,每个分区将包含该用户过去的一天或一周的所有订单信息。

      通过以上步骤,您可以创建一个按用户分表后的时间自动分区的视图。您可以根据需要修改视图的定义,以适应您的需求。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部