web-dev-qa-db-ja.com

MySQLのパーティションから行を選択する方法

300MBのテーブルにパーティションを作成し、このコマンドを使用してp0パーティションからselectクエリを作成しようとしました

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クエリを作成するにはどうすればよいですか?

9
Kad

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'_に変更できます

12
Ravi

実際、MySQL 5.6以降、サポートされている構文は次のとおりです。

SELECT * FROM table PARTITION (partitionName);
9
rudygodoy

正解です。5.1.54バージョンでは、PARTITIONの明示的な選択はサポートされていません。 this postを参照してください

2
Hanky Panky

queryの正しい形式は、以下のとおりです。

select * from employees partition (`p0`);
2

私の答えがコメントに変換された理由がわかりません;)

それを元に戻します。これを確認してください DBAに関する質問 。現在のバージョンのMYSQLではサポートされていません。

MYSQL dev article もチェックしてください。

1
bonCodigo