我有一张包含时间信息的表格,因此该表格包含年,月,日,小时等栏目。
表有多年的数据,而且相当大,所以我决定在这个表上进行分区,开始学习Mysql分区,但很少有人提出问题。
如果有人能帮助我理解分区和索引如何协同工作,我将非常感激。
实施例。 Sql:Select month, day, hour ... from time_table where year = '2017';
Ex Sql:Select year, month, day .... from time_table where month = '05';
答案 0 :(得分:2)
分区将表格拆分为,然后我们说,"子表格"。每个子表本质上都是一个表,包含数据和索引。
当表中的SELECTing
时,首先要做的是确定哪些分区可能包含所需的数据。这是"分区修剪"并使用"分区键" (显然是year
)。然后使用适当的索引将select应用于相关的子表。在这种情况下,INDEX(year, ...)
是一种浪费,因为你已经被修剪到了一年。
由于您未在year
子句中指定WHERE
,因此您的样本选择无法执行分区修剪。因此,它会查看所有分区,并且比没有对表进行分区时要慢。
YEAR(date)
,MONTH(date)
等。month='05'
)如果你想支持一个步骤并解释你想要完成的事情,也许我们可以讨论另一种方法。