11

我对我的 300MB 表进行了分区,并尝试p0使用此命令从分区中进行选择查询

SELECT * FROM employees PARTITION (p0);

但我收到以下错误

ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the right syntax to use near '(p0)' at line 1

如何编写选择查询以从特定分区获取数据?

4

8 回答 8

14

实际上,从 MySQL 5.6 开始,支持的语法是:

SELECT * FROM table PARTITION (partitionName);
于 2015-06-06T02:52:13.650 回答
13

根据您的 MySql 版本,关键字在MySQL 5.6.2PARTITION之前不存在。您将使用 MySQL 5.5 甚至 5.1,但不是 5.6。如果您正在使用,那么您可以执行一些解决方法,如下所示MySQL 5.1

SELECT partition, count(ID)
FROM
(
    SELECT ID,
      case when condition then p1
           when condition then p2
      .....
      end as partition

    FROM
      table
) s1
GROUP BY partition

注意:上述解决方案只是让您获得所需输出的解决方法。

您也可以尝试使用此查询来计算分区的总行数。

SELECT table_rows as 'count(*)' FROM information_schema.partitions WHERE table_schema = schema() and table_name ='employees' and partition_name = 'p0';

注意:您可以更改table_schema = schema()table_schema = 'yourschema'

于 2013-01-01T17:02:40.940 回答
2

没错,5.1.54 版本不支持显式选择 PARTITION。看到这个帖子

于 2013-01-01T17:02:10.300 回答
2

的正确形式query如下,对我来说很好。

select * from employees partition (`p0`);
于 2018-09-06T10:52:56.573 回答
1

当前版本的 MYSQL 不支持它。

在 DBA 上检查这个问题。您还可以查看 MYSQL 开发文章

于 2013-01-01T17:09:00.947 回答
1

从分区中选择* invoice_detail(p1);

于 2020-02-08T06:39:59.497 回答
0

我正在拔头发然后意识到我的错误

select * from user_info as ui PARTITION (`p0`) 

该查询失败,因为必须在分区列表之后指定别名

 select * from user_info PARTITION (`p0`) as ui
于 2022-02-22T20:25:44.390 回答
-1

我认为值得向可能偶然发现此页面的其他人指出,300MB 的表不需要分区。

对于任何现代(甚至不是那么现代)的数据库来说,300MB 的数据量都是微不足道的,因此,如果您将数据留在一个分区的一个数据库中的一个表中,一切都会更好。

于 2020-02-08T08:20:48.450 回答