すべてのプロダクト
Search
ドキュメントセンター

PolarDB:データを効率的にスキャンする方法

最終更新日:May 28, 2024

分散型リレーショナルデータベースサービス (PolarDB-X 1.0) は、効率的なデータスキャンをサポートし、テーブル全体のスキャン中に統計的な集計に集計関数を使用します。

一般的なスキャンシナリオ

  • データベースまたはテーブルシャードのないテーブルのスキャン: PolarDB-X 1.0は、元のSQL文をバックエンドのApsaraDB RDS for MySQLデータベースに送信して実行します。 この場合、PolarDB-X 1.0は任意の集約関数をサポートします。
  • 非フルテーブルスキャン: PolarDB-X 1.0を通過したSQLは、元のSQLステートメントを各ApsaraDB RDS for MySQLデータベースに送信して実行します。 たとえば、WHERE句のシャードキーが "equal to" を示している場合、非フルテーブルスキャンが実行されます。 この場合、PolarDB-X 1.0はすべての集計関数もサポートします。
  • フルテーブルスキャン: 現在サポートされている集計関数は、COUNT、MAX、MIN、およびSUMです。さらに、LIKE、ORDER BY、LIMIT、およびGROUP BYもフルテーブルスキャン中にサポートされます。
  • すべてのテーブルシャードの並列スキャン: すべてのデータベースからデータをエクスポートする必要がある場合は、SHOWコマンドを実行してテーブルトポロジを表示し、すべてのテーブルシャードを並列にスキャンできます。 詳細については、以下をご参照ください。

ヒントを使用したトラバーステーブル

  1. 実行TABLE_NAMEからTOPOLOGYを表示するテーブルトポロジを取得します。
    mysql> DRDS_USERSからTOPOLOGYを表示します。------ ------------------- ----------------
    | ID | GROUP_NAME | テーブル名 |
    ------ ------------------- ----------------
    | 0 | DRDS_00_RDS | DRDS_USERS |
    | 1 | DRDS_01_RDS | DRDS_USERS |
    ------ ------------------- ----------------
    セットの2列 (0.06秒) 
    説明
    • デフォルトでは、非シャーディングテーブルはデータベースシャード0に格納されます。
    • SHOW TOPOLOGY FROM TABLE_NAMEを実行して、各スキャン操作の前に最新のテーブルトポロジを取得することを推奨します。
  2. トポロジに基づいて各テーブルをトラバースします。
    • データベースシャード0で現在のSQLステートメントを実行します。
      /! TDDL:node='DRDS_00_RDS '*/ SELECT * FROM DRDS_USERS; 
    • データベースシャード1で現在のSQLステートメントを実行します。
      /! TDDL:node='DRDS_01_RDS '*/ SELECT * FROM DRDS_USERS; 

並列スキャン

PolarDB-X 1.0を使用すると、mysqldumpを実行してデータをエクスポートできます。 ただし、データをより高速にスキャンしたい場合は、テーブルシャードごとに複数のセッションを有効にして、テーブルを並列にスキャンできます。

mysql> LJLTESTからTOPOLOGYを表示します。------ ---------------- -------------
| ID | GROUP_NAME | テーブル名 |
------ ---------------- -------------
| 0 | TDL5_00_GROUP | ljltest_00 |
| 1 | TDL5_00_GROUP | ljltest_01 |
| 2 | TDL5_00_GROUP | ljltest_02 |
| 3 | TDL5_01_GROUP | ljltest_03 |
| 4 | TDL5_01_GROUP | ljltest_04 |
| 5 | TDL5_01_GROUP | ljltest_05 |
| 6 | TDL5_02_GROUP | ljltest_06 |
| 7 | TDL5_02_GROUP | ljltest_07 |
| 8 | TDL5_02_GROUP | ljltest_08 |
| 9 | TDL5_03_GROUP | ljltest_09 |
| 10 | TDL5_03_GROUP | ljltest_10 |
| 11 | TDL5_03_GROUP | ljltest_11 |
------ ---------------- -------------
セットの12行 (0.06秒) 
上記のように、テーブルには4つのデータベースシャードがあり、各データベースシャードには3つのテーブルシャードがあります。 TDDL5_00_GROUPデータベースのテーブルシャードで次のSQL文を実行します。
/! TDDL:node='TDDL5_00_GROUP '*/ select * from ljltest_00; 
説明
  • HINTのTDDL5_00_GROUPは、SHOW TOPOLOGYコマンドの出力のGROUP_NAME列に対応します。
  • SQL文のテーブル名は、テーブルシャード名です。
  • この時点で、最大12のセッション (それぞれ12のテーブルシャードに対応) を有効にして、データを並行して処理できます。