【问题标题】:find the number of rows in each partition using "HASH PARTITIONING" in mysql在mysql中使用“HASH PARTITIONING”查找每个分区中的行数
【发布时间】:2021-04-21 21:16:36
【问题描述】:

我正在阅读一本关于“SQL QUERIES”的书,在关于“用于分区的 HASH 方法”的部分中,我找到了我将在此处发布的查询。我试图通过在“WAMPSERVER”上运行的本地主机来做到这一点。这是查询:

CREATE TABLE courses
( id_course INT NOT NULL,
course_name VARCHAR(300) NOT NULL,
course_level ENUM('beginner', 'intermediate', 'advanced')
)
PARTITION BY HASH (id_course)
PARTITIONS 5 (PARTITION C1, PARTITION C2, PARTITION C3, PARTITION C4, PARTITION C5);

之后,我在表中插入了 10 行。这是表格行的图片:

之后,我试图找出每个分区中的行数。这本书建议了这个查询:

但问题是在书中查询的输出中“partition_rowcount”列与我不相似。我(仅供参考)解释说这本书有 4 个分区并将它们命名为“H1 到 H4”。这是书的输出:

我想知道问题出在哪里以及为什么我的输出与书本不同。我知道还有其他查询可以查找每个分区中的行,但我无法理解造成这种差异的原因。

【问题讨论】:

  • 我还没有发现HASH 分区的任何好处。跳过那一章;永远不需要它。了解PARTITION BY RANGE(),但不要指望那个变种会带来奇迹。
  • 您使用的是什么版本的 MySQL/MariaDB? SHOW VARIABLES LIKE 'version';
  • 我使用的是 mariaDB 10.4.10 版和 mysql 8.0.18 版

标签: mysql sql localhost partitioning


【解决方案1】:

您的结果是一个十六进制字符串,表明数据类型出现问题。这在https://bugs.mysql.com/bug.php?id=56642 中有解释。尝试将 count 显式转换为字符串,以便它可以正常与您的其他字符串连接:

Select concat("# of rows in H1",(cast count(*) as char)) partition_rowcount
From courses partition (c1)
...

【讨论】:

  • 感谢您的回答。但是你确定语法吗?因为它给了我一个语法错误:你的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在 'count(*) as char)) 附近使用的正确语法 partition_rowcount
  • 该错误报告似乎归咎于 Workbench,得到的问题似乎是使用命令行工具 (mysql)。
  • 我不使用 mysql 工作台。我正在使用 mysql 命令行。
猜你喜欢
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 2013-12-07
  • 2019-03-24
  • 2014-11-21
  • 2011-06-12
  • 1970-01-01
  • 2021-08-28
相关资源
最近更新 更多