外国為替取引とは

ファンクションインデックス

ファンクションインデックス

tシャツ Tシャツ ポンチ ラウンドヘムプルオーバー【マルチファンクション】

『タイムセール実施中』
ZOZO問い合わせ番号:55848319
ショップ:index,インデックス
ブランド:index,インデックス
商品名:ポンチ ラウンドヘムプルオーバー【マルチファンクション】
カテゴリ:トップス>Tシャツ/カットソー
ブランド品番:C58-12203-2021-01
素材:本体: コットン65 ポリエステル33 ポリウレタン2% 別布部分: ポリエステル80 コットン20%
原産国:中国製
カラー:オフホワイト,ベージュ,パープル,グリーン系
サイズ:36,38,40,42
企画ID:1368602,1366806,1325665,1325661,1325659,1310675,1310674,1310673,1310103

『タイムセール実施中』
ZOZO問い合わせ番号:55848319
ショップ:index,インデックス
ブランド:index,インデックス
商品名:ポンチ ラウンドヘムプルオーバー【マルチファンクション】
カテゴリ:トップス>Tシャツ/カットソー
ブランド品番:C58-12203-2021-01
素材:本体: コットン65 ファンクションインデックス ポリエステル33 ポリウレタン2% 別布部分: ポリエステル80 コットン20%
原産国:中国製
カラー:ファンクションインデックス オフホワイト,ベージュ,パープル,グリーン系
サイズ:36,38,40,42
企画ID:1368602,1366806,1325665,1325661,1325659,1310675,1310674,1310673,1310103

  • 販売期間:2022年5月25日 20:00 ~ 2022年5月30日 2:00
  • 商品について詳しく知りたい
  • お届け日、発送日、送料が知りたい
  • ファンクションインデックス
  • 在庫状況、再入荷状況が知りたい 等

レビューコメント

  • サイズ/ ちょうどよい
  • 生地/ 少し厚め
  • 伸縮性/ 普通
  • グリーン系
  • ファンクションインデックス
  • 38(レディース:Mサイズ相当)
  • サイズ/ 少し大きめ
  • 生地/ 少し厚め
  • 伸縮性/ 普通
  • 女性
  • 20代
  • 156cm~160cm
  • ベージュ
  • ファンクションインデックス
  • 38(レディース:Mサイズ相当)
  • オフホワイト
  • 40(L)
  • パープル
  • 38(M)

販売ストア

ZOZOTOWN PayPayモール店

関連のおすすめブランド

  • 19円相当 (1%)

ヤフー株式会社またはPayPay株式会社が、不正行為のおそれがあると判断した場合(複数のYahoo! JAPAN IDによるお一人様によるご注文と判断した場合を含みますがこれに限られません)には、表示された付与数では付与されない場合があります。

パフォーマンスチューニング9つの技 ~「探し」について~
PostgreSQLインサイド

PostgreSQLの「探し」のポイント

SELECT文にORDER BY句を使用する場合には、ORDER BY句に書かれているカラムの順番でインデックスが定義されていれば、SELECT文の実行時にソート処理が省略されます。それは、ソート処理を実行しなくてもインデックスを順番に見ていくことでソートされた結果を取り出すことができるためです。その結果、SELECT文は高速に処理できます。また、LIMIT句がある場合は、LIMITで指定された個数までしかデータにアクセスしないで済むため、さらに効果が見込めます。

ソート処理をインデックススキャンで代用する例(LIMIT句も利用)

検索方式Index Only Scanを活用する

SELECT文で指定されたWHERE句と選択リストに指定されたカラムがすべてインデックスに含まれている場合、および、インデックスの種類がB-treeなどのようにIndex Only Scanをサポートしている場合には、プランナーが実行計画を作成する際に、高速なスキャン方式であるIndex Only Scanを選択します。Index Only Scanは、インデックスデータをアクセスするだけで処理ができ、テーブルデータへのアクセスが不要になるため高速な検索が可能です。ただし、インデックスデータのみで高速に処理させるためには、該当のレコードが存在するページが、すべてのトランザクションから取り出し可能な状態になっている必要があり、その情報は可視性マップ(注1)から取得されます。そのケースに該当する例としては、部署データなどの基本的に変更の殆どないマスターデータのテーブルを検索する場合が挙げられます。以下に、その動作概要を示します。

Index Only Scanによるインデックス活用例

図7 Index Only Scanによるインデックス活用例

  • (1)Index Only ファンクションインデックス Scanによりインデックスを検索する。
  • (2)SELECT文の条件に指定されたレコードの存在するページの可視性マップをチェックする。
  • (3)可視性マップをチェックした結果、ページすべてがトランザクションとして取り出し可能であるかどうか判断する。
    • 可能である場合は、ページにアクセスせずインデックスのデータを取得する。
    • 可能でない場合は、実際にページをアクセスし、取り出しが可能かどうかを判断した上でデータを取得する。

    2.1.2 複合インデックス作成時のポイント

    インデックス定義はより絞り込める条件のカラムから順番に記述する、ただし例外あり

    2.1.3 SQL文記述時におけるインデックスの有効な利用方法

    SQLのOR条件式を工夫することで、インデックスの絞り込みを有効にする

    まず、上記のカラムdate、timeのインデックスを利用して検索しようとすると、プランナーは date > '2019/4/1' の条件で検索し、その後、date = '2019/4/1' ファンクションインデックス AND time >= '12:00:00' の条件でも検索します。次にこれらの結果をマージするよう実行計画を立てます。この処理はコストが高いため、パフォーマンスが出ないことが考えられます。

    SQLにOR条件がある場合の処理の流れ

    そこで、ORの両辺にあるdateの条件が両方とも date >= ‘2019/4/1’ を満たすので、この条件をANDで追加します。

    追加するAND条件

    関数や演算を利用した条件なら「式インデックス」を利用する

    WHERE句の条件文で異なるデータ型による比較を行った場合の影響について

    2.2 実行計画を評価し制御する

    実行計画から時間を費やしている箇所を特定する

    各処理に費やした時間については、以下の結果になります。
    【上位ノード】131.686 - Seq Scanの時間(131.519) - Index Scanの時間(0.132) = 0.035 ms
    【下位ノード1】131.519 × 実行回数1回 = 131.519 ms
    【下位ノード2】0.012 × 実行回数11回 = 0.132 ms

    これらの情報を基に、実行計画の妥当性を確認します。例えば、Seq Scanで時間を費やしている場合はインデックスを追加することを検討します。しかし、loopsの回数が多く時間を費やしている場合は、結合方法を変更するなど、ノードの要素を強制的に変更することも検討してください。結合方法の変更については次の項目で説明しますが、コマンド「SET enable_nestloop = off」により一時的にNested Loopを抑止することで行うことも可能です。
    なお、【上位ノード】と【下位ノード1】において、推定時の行数(rows)が1であるのに対し、実行時の行数(rows)は11になっています。これは、統計情報が最新化されていない可能性が考えられます。この場合は、autovacuumの実行頻度の設定を見直すか、あるいは、手動でANALYZEコマンドを実行することで解決できます。

    カーソル利用時の実行計画について

    pg_hint_planを用いて、実行計画を制御する

    pg_dbms_statsを用いて、統計情報を固定化する

    2.3 クライアント側で無駄を削減する

    何度も実行するSQLは、プリペアド文を定義し再利用する

    • 1)プリペアド文で準備したSQLを繰り返し実行する時に、最初の5回目までは、毎回、パラメーターに合わせた実行計画(実行計画A1からA5とします)を作成します。
    • 2)6回目以降に実行する時は、パラメーターの値が未設定である汎用的な実行計画(実行計画Bとします)を作成し、今まで作成した実行計画A1からA5までの平均コストと、実行計画Bのコストを比較して、今後、汎用的な実行計画を利用するか否かを判定します。
    • 3)実行計画Bのコストが実行計画Aの平均コストよりもそれほど大きくない場合、それ以降のSQL実行で実行計画を毎回作成せず、汎用的な実行計画(実行計画B)を利用します。
      あるいは、実行計画Bのコストが実行計画A1からA5までの平均コストよりもかなり大きい場合は、パラメーターに合わせた実行計画を毎回作成して利用します。
    • 自動判定(上記の方法、デフォルト値)
    • 必ず汎用的な実行計画を利用する(理想的なプランについて、パラメーター値への依存度が低い場合に有効)
    • 必ずその都度実行計画を作成する(理想的なプランについて、パラメーター値への依存度が高い場合に有効)

    コネクションプーリングを使い、接続処理を省略する

    頻繁にPostgreSQLへの接続と切断を繰返すシステムのような場合、このコネクション処理がオーバーヘッドになります。その場合は、コネクションプーリングを用いることで、すでに接続されているコネクションを再利用でき、パフォーマンス改善につなげることができます。コネクションプーリングは、Pgpool-IIを利用したり、JDBCやNpgsql(.NET Data Provider)などのインターフェイスに組み込まれているものを利用したり、クライアント側でコネクションプーリング機能を作り込んだりすることで実現できます。

    ユーザー定義関数を用いて処理を関数化し、ネットワーク通信を省略する

    フェッチサイズを調整する

    • JDBCの接続文字列に設定できるdefaultRowfetchSizeパラメーターにより変更
    • ODBCのCache Sizeオプションにより変更

    こちらもおすすめ

    PostgreSQLについてより深く知る

    「FUJITSU Software DevTech Days 2021」の講演を配信

    大好評のうちに閉幕しましたオンラインイベント「FUJITSU Software DevTech Days 2021」での各講演を配信しています。PostgreSQL 15に向けた展望や、Kubernetesなどのコンテナ技術を活用したデータベースの効率的な運用方法など見所満載です。ぜひご視聴ください!

    パフォーマンスチューニング9つの技 ~「探し」について~
    PostgreSQLインサイド

    PostgreSQLの「探し」のポイント

    SELECT文にORDER BY句を使用する場合には、ORDER BY句に書かれているカラムの順番でインデックスが定義されていれば、SELECT文の実行時にソート処理が省略されます。それは、ソート処理を実行しなくてもインデックスを順番に見ていくことでソートされた結果を取り出すことができるためです。その結果、SELECT文は高速に処理できます。また、LIMIT句がある場合は、LIMITで指定された個数までしかデータにアクセスしないで済むため、さらに効果が見込めます。

    ソート処理をインデックススキャンで代用する例(LIMIT句も利用)

    検索方式Index Only Scanを活用する

    SELECT文で指定されたWHERE句と選択リストに指定されたカラムがすべてインデックスに含まれている場合、および、インデックスの種類がB-treeなどのようにIndex Only Scanをサポートしている場合には、プランナーが実行計画を作成する際に、高速なスキャン方式であるIndex Only Scanを選択します。Index Only Scanは、インデックスデータをアクセスするだけで処理ができ、テーブルデータへのアクセスが不要になるため高速な検索が可能です。ただし、インデックスデータのみで高速に処理させるためには、該当のレコードが存在するページが、すべてのトランザクションから取り出し可能な状態になっている必要があり、その情報は可視性マップ(注1)から取得されます。そのケースに該当する例としては、部署データなどの基本的に変更の殆どないマスターデータのテーブルを検索する場合が挙げられます。以下に、その動作概要を示します。

    Index Only Scanによるインデックス活用例

    図7 Index Only Scanによるインデックス活用例

    • (1)Index Only Scanによりインデックスを検索する。
    • ファンクションインデックス
    • (2)SELECT文の条件に指定されたレコードの存在するページの可視性マップをチェックする。
    • (3)可視性マップをチェックした結果、ページすべてがトランザクションとして取り出し可能であるかどうか判断する。
      • 可能である場合は、ページにアクセスせずインデックスのデータを取得する。
      • 可能でない場合は、実際にページをアクセスし、取り出しが可能かどうかを判断した上でデータを取得する。

      2.1.2 複合インデックス作成時のポイント

      インデックス定義はより絞り込める条件のカラムから順番に記述する、ただし例外あり

      2.1.3 SQL文記述時におけるインデックスの有効な利用方法

      SQLのOR条件式を工夫することで、インデックスの絞り込みを有効にする

      まず、上記のカラムdate、timeのインデックスを利用して検索しようとすると、プランナーは date > '2019/4/1' の条件で検索し、その後、date = '2019/4/1' AND time >= '12:00:00' の条件でも検索します。次にこれらの結果をマージするよう実行計画を立てます。この処理はコストが高いため、パフォーマンスが出ないことが考えられます。

      SQLにOR条件がある場合の処理の流れ

      そこで、ORの両辺にあるdateの条件が両方とも ファンクションインデックス date >= ‘2019/4/1’ を満たすので、この条件をANDで追加します。

      追加するAND条件

      関数や演算を利用した条件なら「式インデックス」を利用する

      WHERE句の条件文で異なるデータ型による比較を行った場合の影響について

      2.2 実行計画を評価し制御する

      実行計画から時間を費やしている箇所を特定する

      各処理に費やした時間については、以下の結果になります。
      【上位ノード】131.686 - Seq Scanの時間(131.519) - Index Scanの時間(0.132) = 0.035 ms
      【下位ノード1】131.519 × 実行回数1回 = 131.519 ms
      【下位ノード2】0.012 × 実行回数11回 = 0.132 ms

      これらの情報を基に、実行計画の妥当性を確認します。例えば、Seq Scanで時間を費やしている場合はインデックスを追加することを検討します。しかし、loopsの回数が多く時間を費やしている場合は、結合方法を変更するなど、ノードの要素を強制的に変更することも検討してください。結合方法の変更については次の項目で説明しますが、コマンド「SET enable_nestloop = off」により一時的にNested Loopを抑止することで行うことも可能です。
      なお、【上位ノード】と【下位ノード1】において、推定時の行数(rows)が1であるのに対し、実行時の行数(rows)は11になっています。これは、統計情報が最新化されていない可能性が考えられます。この場合は、autovacuumの実行頻度の設定を見直すか、あるいは、手動でANALYZEコマンドを実行することで解決できます。

      カーソル利用時の実行計画について

      pg_hint_planを用いて、実行計画を制御する

      pg_dbms_statsを用いて、統計情報を固定化する

      2.3 クライアント側で無駄を削減する

      何度も実行するSQLは、プリペアド文を定義し再利用する

      • 1)プリペアド文で準備したSQLを繰り返し実行する時に、最初の5回目までは、毎回、パラメーターに合わせた実行計画(実行計画A1からA5とします)を作成します。
      • 2)6回目以降に実行する時は、パラメーターの値が未設定である汎用的な実行計画(実行計画Bとします)を作成し、今まで作成した実行計画A1からA5までの平均コストと、実行計画Bのコストを比較して、今後、汎用的な実行計画を利用するか否かを判定します。
      • 3)実行計画Bのコストが実行計画Aの平均コストよりもそれほど大きくない場合、それ以降のSQL実行で実行計画を毎回作成せず、汎用的な実行計画(実行計画B)を利用します。
        あるいは、実行計画Bのコストが実行計画A1からA5までの平均コストよりもかなり大きい場合は、パラメーターに合わせた実行計画を毎回作成して利用します。
      • 自動判定(上記の方法、デフォルト値)
      • 必ず汎用的な実行計画を利用する(理想的なプランについて、パラメーター値への依存度が低い場合に有効)
      • 必ずその都度実行計画を作成する(理想的なプランについて、パラメーター値への依存度が高い場合に有効)

      コネクションプーリングを使い、接続処理を省略する

      頻繁にPostgreSQLへの接続と切断を繰返すシステムのような場合、このコネクション処理がオーバーヘッドになります。その場合は、コネクションプーリングを用いることで、すでに接続されているコネクションを再利用でき、パフォーマンス改善につなげることができます。コネクションプーリングは、Pgpool-IIを利用したり、JDBCやNpgsql(.NET Data Provider)などのインターフェイスに組み込まれているものを利用したり、クライアント側でコネクションプーリング機能を作り込んだりすることで実現できます。

      ユーザー定義関数を用いて処理を関数化し、ネットワーク通信を省略する

      フェッチサイズを調整する

      • JDBCの接続文字列に設定できるdefaultRowfetchSizeパラメーターにより変更
      • ODBCのCache Sizeオプションにより変更

      こちらもおすすめ

      PostgreSQLについてより深く知る

      「FUJITSU Software DevTech Days 2021」の講演を配信

      大好評のうちに閉幕しましたオンラインイベント「FUJITSU Software ファンクションインデックス ファンクションインデックス DevTech Days 2021」での各講演を配信しています。PostgreSQL 15に向けた展望や、Kubernetesなどのコンテナ技術を活用したデータベースの効率的な運用方法など見所満載です。ぜひご視聴ください!

      関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次
閉じる