带有日期时间列的 Mysql 大表

标签 mysql

什么是最适合我的场景

我有一个表,有将近2000万条记录,基本上存储了用户在网站上做了什么

  • id -> primary int 11 auto increment
  • user_id -> index int 11 not null
  • create_date ->(还没有索引)日期时间不为空
  • 它还有其他列,但在这里命名它们似乎无关紧要

我知道我必须在 create_date 上放置一个索引,但是我是放置一个单列索引还是一个双列,哪个先放在双索引上(考虑到大量记录)?

顺便说一句,我现在使用的查询是这样的:

select max(id) -- in here I'm selecting actions that users have done, after this date, since date is today
from table t
where 
    t.create_date >= '2014-12-29 00:00:00'
group by t.user_id

最佳答案

您能否使用您的 SELECT 的 EXPLAIN PLAN 编辑您的问题? EXPLAIN Link .同时,你可以试试这个:

  • 使用您的日期字段 create_date 进行分区。 Partitions
  • 首先使用最严格的条件构建索引。我认为在你的情况下,create_date + user_id 会更好

    创建索引 index_name ON table_name ( create_date , user_id );

关于带有日期时间列的 Mysql 大表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705458/

相关文章:

MySQL - 只返回过去 X 天的条目

PHP - 带有 SQL 查询的多个函数

Python/MySQL - 将csv数据导入mysql表

PHP 从数据库中搜索

mysql - 数据库在 QuerySet.datetimes() 中返回无效值

php - 将 IPv6 存储在数据库中

php - 在 MySQL 数据库中保存数据的最有效方法是什么

java - 使用 JdbcTemplate 获取查询返回的行数

c# - 从 MySql 数据库收集数据以与变量进行比较

mysql - 插入时从另一个表中选择数据