如何从MySQL中的分区中选择行

问题描述 投票:9回答:5

我将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

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

mysql sql partitioning database-partitioning mysql-5.1
5个回答
12
投票

根据你的MySql版本,PARTITION关键字在MySQL 5.6.2之前不存在。您将使用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'


8
投票

实际上,自MySQL 5.6以来支持的语法是:

SELECT * FROM table PARTITION (partitionName);

2
投票

你是对的,5.1.54版本不支持显式选择PARTITION。见this帖子


1
投票

不知道为什么我的答案被转换成评论;)

把它放回去。检查这个question on DBA。它在当前版本的MYSQL中不受支持。

您也可以查看MYSQL dev article


1
投票

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

select * from employees partition (`p0`);
© www.soinside.com 2019 - 2024. All rights reserved.