[英]Indexing and Partition on same column
我们可以在日期列上进行分区,例如:
按范围分区(TO_DAYS(date_time))(
和基于一天中的小时在同一列上建立索引,例如:
CREATE INDEX index_name ON tabel_name (HOUR(date_time));
分区是必需的,以便通过简单地删除分区可以轻松删除以后的数据。 索引我们正试图加快基于 date_time 列的查询(因为一天也会有数百万行)。
这是正确的方法吗?它将如何表现? 还有其他更好的方法吗?
可能是。
分区非常适合清除旧数据,但对大多数查询没有好处。 小时索引不太可能被使用。 让我们看看查询。
典型的SELECT
是什么? 如果它在其他列上进行过滤,则按小时编制索引是无用的。 如果您仅按小时或任何日期时间类型值进行过滤,那么将日期时间作为非分区表中的第一列是最佳选择。 (并且PARTITIONing
仅对清除“旧”数据有益。)
请注意,值为 0..23 的索引仅对指定 0 到 23 之间的值的查找有用。如果要查找特定日期中午某个时间的行:
WHERE dt >= '2020-01-02 12:00:00'
AND dt < '2020-01-02 12:00:00' + INTERVAL 1 HOUR
是最实用和有效的方法。 这需要一个带有dt
的索引,而不是一个独立的小时索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.