与datetime列的Mysql大表

时间:2014-12-30 12:25:51

标签: mysql

我的方案最棒的是什么

我有一张包含近20,000,000条记录的表格,基本上存储了用户在网站上所做的事情

  • id - > primary int 11 auto increment
  • user_id - > index int 11 not null
  • create_date - > (还没有索引)date-time not null
  • 它有其他列,但似乎与在此命名无关

我知道我必须在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

1 个答案:

答案 0 :(得分:1)

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

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

    会更好

    CREATE INDEX index_name ON table_name(create_date,user_id);