InfiniDBはエクステントマップを使用して、アクセス対象列のエクステントの絞り込みを行っていますが、すべてのSELECT処理でエクステントマップが使用されるわけではありません。
例えば、対象列に以下のデータ型を使用している場合は、エクステントマップは使用されません。
エクステントマップが使用されないデータ型
http://infinidb-tech.ashisuto.co.jp/unused-datatypes-on-extentmap/
実行したSELECT処理でエクステントマップが使用されているかどうかは、実行計画、または統計情報を取得することで確認できます。
※実行計画、統計情報の詳細については、本記事の最下部の「参考情報」をご確認ください。
エクステントマップが使用される場合の例
1. クエリを実行
WHERE句のlo_orderkeyはDECIMAL型の列のためエクステントマップが使用されます。
1 2 3 4 5 6 7 |
mysql> SELECT DISTINCT(lo_orderpriority) FROM lineorder WHERE lo_orderkey = 1; +------------------+ | lo_orderpriority | +------------------+ | 2-HIGH | +------------------+ 1 row in set, 1 warning (0.23 sec) |
2. 実行計画を確認
「PBE」が617,878となっています。これはエクステントマップによりアクセス対象から除外されたブロック数です。
1 2 3 4 5 6 7 8 9 |
mysql> SELECT calgettrace()\G *************************** 1. row *************************** calgettrace(): Desc Mode Table TableOID ReferencedColumns PIO LIO PBE Elapsed Rows BPS PM lineorder 3016 (lo_orderkey,lo_orderpriority) 8705 8194 617878 0.217 1 TAS UM - - - - - - 0.138 1 TNS UM - - - - - - 0.000 1 1 row in set (0.01 sec) |
3. 統計情報を確認
統計情報の「PBE」も同じく617,878となっており、エクステントマップが使用されたことがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> SELECT calgetstats()\G *************************** 1. row *************************** calgetstats(): Query Stats: MaxMemPct-0; NumTempFiles-0; TempFileSpace-0B; ApproxPhyI/O-8705; CacheI/O-8194; BlocksTouched-8194; PartitionBlocksEliminated-617878; MsgBytesIn-113KB; MsgBytesOut-2KB; Mode-Distributed 1 row in set (0.00 sec) |
※実行結果を見やすくするために改行しています。
エクステントマップが使用されない場合の例
1. クエリを実行
WHERE句のlo_orderpriorityはCHAR(15)の列のためエクステントマップが使用されません。
1 2 3 4 5 6 7 |
mysql> SELECT DISTINCT(lo_orderpriority) FROM lineorder WHERE lo_orderpriority= "2-HIGH"; +------------------+ | lo_orderpriority | +------------------+ | 2-HIGH | +------------------+ 1 row in set, 1 warning (21.85 sec) |
2. 実行計画を確認
「PBE」が0となっておりアクセス対象から除外されたブロックがないことがわかります。エクステントマップが使用されない場合はこの値は0になります。
1 2 3 4 5 6 7 8 9 10 11 |
mysql> SELECT calgettrace()\G *************************** 1. row *************************** calgettrace(): Desc Mode Table TableOID ReferencedColumns PIO LIO PBE Elapsed Rows DSS PM lineorder 3016 (lo_orderpriority) 0 40 - 0.111 40 BPS PM lineorder 3016 (lo_orderpriority) 626070 1332824 0 21.693 1244 HJS PM lineorder-lineorder 3016 - - - - ----- - TAS UM - - - - - - 21.609 1 TNS UM - - - - - - 0.000 1 1 row in set (0.01 sec) |
3. 統計情報を確認
統計情報の「PBE」も同じく0となっており、エクステントマップが使用されなかったことがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
mysql> SELECT calgetstats()\G *************************** 1. row *************************** calgetstats(): Query Stats: MaxMemPct-0; NumTempFiles-0; TempFileSpace-0B; ApproxPhyI/O-626070; CacheI/O-1332864; BlocksTouched-1330422; PartitionBlocksEliminated-0; MsgBytesIn-7MB; MsgBytesOut-94KB; Mode-Distributed 1 row in set (0.00 sec) |
※実行結果を見やすくするために改行しています。
参考情報
クエリの統計情報を取得するSQLの実行計画を取得する