- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个表,其中的字段是 action_time 主键,类型是 datetime
我尝试在分区上打破它
ALTER TABLE foo PARTITION BY RANGE (MONTH(action_time))
(
PARTITION p01 VALUES LESS THAN (02) ,
PARTITION p02 VALUES LESS THAN (03) ,
PARTITION p03 VALUES LESS THAN (04) ,
PARTITION p04 VALUES LESS THAN (05) ,
PARTITION p05 VALUES LESS THAN (06) ,
PARTITION p06 VALUES LESS THAN (07) ,
PARTITION p07 VALUES LESS THAN (08) ,
PARTITION p08 VALUES LESS THAN (09) ,
PARTITION p09 VALUES LESS THAN (10) ,
PARTITION p10 VALUES LESS THAN (11) ,
PARTITION p11 VALUES LESS THAN (12) ,
PARTITION p12 VALUES LESS THAN (13) ,
PARTITION pmaxval VALUES LESS THAN MAXVALUE
);
在 phpmyadmin 中我看到有行的分区但是当我执行
explain partitions select * from foo where action_time between '2017-01-01 20:34:08' and '2017-01-21 20:34:08';
或
explain partitions select * from foo where action_time > '2017-01-01 20:34:08' && action_time < '2017-01-21 20:34:08'
它命中所有分区(p01、p02、p03、p04、p05、p06、p07、p08、p09、p10、p11、p12、pmaxval)
我做错了什么?
我也用这种方式试过同样的结果
ALTER TABLE foo
PARTITION BY RANGE( YEAR(action_time) )
SUBPARTITION BY HASH( MONTH(action_time) )
SUBPARTITIONS 12 (
PARTITION p2015 VALUES LESS THAN (2016),
PARTITION p2016 VALUES LESS THAN (2017),
PARTITION p2017 VALUES LESS THAN (2018),
PARTITION p2018 VALUES LESS THAN (2019),
PARTITION p2019 VALUES LESS THAN (2020),
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026),
PARTITION p2026 VALUES LESS THAN (2027),
PARTITION p2027 VALUES LESS THAN (2028),
PARTITION p2028 VALUES LESS THAN (2029),
PARTITION p2029 VALUES LESS THAN (2030),
PARTITION pmax VALUES LESS THAN MAXVALUE
);
我需要按年和月拆分表以改进选择时间,当我在日期之间进行选择时它不会在整个表中搜索它应该在相关分区中搜索。我该怎么做?
最佳答案
您已经找到了 PARTITIONing
实际上无用的另一个原因。
假设您指定了 BETWEEN '2015-11-05' AND '2017-02-02'
。它需要命中哪些分区?所有这些。
假设您指定了 BETWEEN '2015-11-05' AND '2016-02-02'
。它需要命中哪些分区? 4、但是绕圈不够聪明。所以它(我认为)会击中所有目标。
只有有限数量的模式(MONTH()
不是其中之一)分区将“正确处理”。
要使 BY RANGE(some date)
起作用,您只能使用 BY RANGE(TO_DAYS(date))
(以及其他一些)。但是你必须每个月(或无论如何)创建一个新分区。并且,可选地,DROP
最旧的分区。
现在由于另一个原因,您的计划可能没用。您希望从分区中获得什么好处?也许性能?可能不会给您带来任何性能优势。让我们看看您的问题,以便我解释原因。
一个简单的
SELECT ...
WHERE date >= '...'
AND date < '...' + INTERVAL 20 DAY
使用INDEX(date)
时和分区一样快。可能更快。
如果 WHERE
中还有其他内容,那么一切都会改变。
为什么 PARTITIONing 不能加速简单查询
假设您有一个简单的 SELECT
,它具有非常好的索引,例如您为 PRIMARY KEY
指定了准确的值。 (这称为“点查询”。)
案例一:非分区表。索引使用 BTree 结构。要在一百万行中定位特定记录,需要向下钻取 BTree,这大约有 3 层深。对于十亿行,它可能是 5 个级别。
案例二:分区表。分区将表拆分为多个表,每个表都有索引。定位特定行首先必须定位特定分区(子表),然后向下钻取该分区的较浅 BTree。
想想它是否(可能)从 BTree 中删除一个级别,但增加了到达分区的额外工作量。性能差异很小。而且,你是赚了还是亏了,还不清楚。 (缓存、数据结构等,使这个分析变得复杂。)
结论:对于点查询,分区无济于事,前提是您在非分区等价物上有合适的索引。
您的特定查询是一个简单的“范围”查询:WHERE action_time BETWEEN ... AND ...
最优的表结构(包括分区和索引)是
INDEX(action_time)
另一个注意事项:如果涉及多个分区,SELECT
将从每个分区(修剪后)获取行(如果有的话),将它们放在一起,然后可能必须对结果进行排序(取决于 SELECT
中的其他子句)。可惜在查询的执行中没有并行性,因此分区变体涉及更多,因此可能更慢。
关于mysql分区不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42489542/
是一种在 Neo4j 分区之间进行物理分离的方法吗? 这意味着以下查询将转到 node1: Match (a:User:Facebook) 虽然此查询将转到另一个节点(可能托管在 docker 上)
我尝试在我的 SQL 服务器上使用分区函数对我的一个大表进行分区,但我收到一条错误消息 “只能在SQL Server企业版中创建分区功能。只有SQL Server企业版支持分区。” 所以我想知道没有企
在hadoop文件系统中,我有两个文件,分别是X和Y。通常,hadoop制作的文件X和Y的大小为64 MB。是否可以强制hadoop划分两个文件,以便从X的32 MB和Y的32 MB中创建一个64 M
据我了解,如果我们有一个主键,则使用该键对数据进行分区并将其存储在节点中(例如使用随机分区器)。 现在我不确定的是,如果我有多个键(又名复合键),是用于分区数据的键的组合还是它将是第一个主键? 例如,
我正在向我的 SSAS 多维数据集添加分区,我想知道是否有多个分区可以保留在下面?多少太多了,最佳实践限制是 20 还是 200?有没有人可以分享任何真实世界的知识? 最佳答案 这是 another
我有一个包含大约 200 万条记录的大表,我想对其进行分区。 我将 id 列设置为 PRIMARY AUTO_INCRMENT int (并且它必须始终是唯一的)。我有一列“theyear”int(4
我正在做 mysql 列表分区。我的表数据如下 ---------------------------------------- id | unique_token | city | student_
我有一个表,我们每天在其中插入大约 2000 万个条目(没有任何限制的盲插入)。我们有两个外键,其中一个是对包含大约 1000 万个条目的表的引用 ID。 我打算删除此表中超过一个月的所有数据,因为不
我想在一款足球奇幻游戏中尝试使用 MySQL Partitioning,该游戏的用户分布在联赛中,每个联赛都有一个用户可以买卖球员的市场。当很多用户同时玩时,我在这张表中遇到了一些僵局(在撰写本文时大
我是 jQuery 的新手,想知道是否可以获取一些变量并将它们的除法作为 CSS 宽度。到目前为止我在这里: var x = $(".some-container").length; var y =
所以我正在做家庭作业,我需要为分区、斯特林数(第一类和第二类)和第一类的切比雪夫多项式创建递归函数。我的程序应该能够让用户输入一个正整数 n,然后创建名为 Partitions.txt、Stirlin
我在数据框中有一列,其中包含大约 1,4M 行聊天对话,其中每个单元格中的一般格式为 (1): “名称代理 : 对话” 但是,并非列中的所有单元格都采用这种格式。有些单元格只是 (2): “对话” 我
我在尝试隐藏 a 时遇到了一些问题,直到用户单击某个元素为止。 HTML 看起来像: BRAND item 1 item 2 item 3
一.为什么kafka要做分区? 因为当一台机器有可能扛不住(类比:就像redis集群中的redis-cluster一样,一个master抗不住写,那么就多个master去抗写)
我有一些销售数据,我需要发送存储在单独表中的可用槽中的数量。 销售数据示例: id数量112131415369 create table sales (id serial primary key, q
我计划设置多个节点以使用 glusterfs 创建分布式复制卷 我使用主(也是唯一)分区上的目录在两个节点上创建了一个 gluster 复制卷。 gluster volume create vol_d
我正在尝试使用 sum() over (partition by) 但在总和中过滤。我的用例是将每个产品的 12 个月累计到一个月的条目,因此: ITEM MONTH SALES Item
是否可以创建多个 Enumerators出单Enumerator ? 我正在寻找的相当于 List.partition返回 (List[A], List[A]) ,比如 List().partitio
我正在创建一个基于 x86 的非常简单的 Yocto 图像。 我希望/文件系统是只读的,所以我设置了 IMAGE_FEATURES_append = " read-only-rootfs " 在原件的
是否可以使用一次 collect 调用来创建 2 个新列表?如果没有,我该如何使用分区来做到这一点? 最佳答案 collect(在TraversableLike上定义并在所有子类中可用)与集合和Par
我是一名优秀的程序员,十分优秀!