Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 同一列上的索引和分区_Mysql_Indexing_Query Optimization_Partition - Fatal编程技术网

Mysql 同一列上的索引和分区

Mysql 同一列上的索引和分区,mysql,indexing,query-optimization,partition,Mysql,Indexing,Query Optimization,Partition,我们是否可以在日期列上进行分区,如: 按范围划分(到天(日期时间))( 并根据一天中的小时数在同一列上建立索引,如: 在选项卡名称(小时(日期时间))上创建索引名称 分区是必需的,这样以后的数据就可以通过简单地删除分区来轻松删除。 索引我们正试图加快基于date_time列的查询速度(因为一天内也会有数百万行) 这是正确的方法吗?它将如何运行?还有其他更好的方法吗?可能 分区非常适合清除旧数据,但对大多数查询没有好处。不太可能使用小时索引。让我们看看查询 典型的SELECT是什么?如果它在其他列

我们是否可以在日期列上进行分区,如:

按范围划分(到天(日期时间))(

并根据一天中的小时数在同一列上建立索引,如:

在选项卡名称(小时(日期时间))上创建索引名称

分区是必需的,这样以后的数据就可以通过简单地删除分区来轻松删除。 索引我们正试图加快基于date_time列的查询速度(因为一天内也会有数百万行)

这是正确的方法吗?它将如何运行?还有其他更好的方法吗?

可能

分区非常适合清除旧数据,但对大多数查询没有好处。不太可能使用小时索引。让我们看看查询

典型的
SELECT
是什么?如果它在其他列上进行过滤,则按小时索引是无用的。如果只按小时或任何datetime类型值进行过滤,则将datetime作为未分区表中的第一列是最理想的。(而
分区
仅对清除“旧”数据有益。)

请注意,值为0..23的索引仅适用于指定介于0和23之间的值的查找。如果要查找特定日期中午某个时间的行,请执行以下操作:

WHERE dt >= '2020-01-02 12:00:00'
  AND dt  < '2020-01-02 12:00:00' + INTERVAL 1 HOUR
其中dt>='2020-01-02 12:00:00'
和dt<'2020-01-02 12:00:00'+间隔1小时
是最实用和有效的方法。这需要一个带有
dt
的索引,而不是一个独立的小时索引

有关清除的更多信息: