SQL開発仕様

このドキュメントでは、SQL を使用するための一般的な開発仕様をいくつか紹介します。

テーブルの作成と削除

  • 基本原則: テーブルの命名規則に従うことを前提として、業務プロセスの異常中断を防ぐため、アプリケーション内部でテーブルの作成文と削除文をパッケージ化し、判断ロジックを追加することを推奨します。
  • 詳細: アプリケーション側のSQLコマンド異常実行による異常中断を避けるため、 if判定を追加するにはcreate table if not exists table_nameまたはdrop table if exists table_name文を推奨します。

SELECT *の使用法

  • 基本原則: クエリにはSELECT *を使用しないでください。
  • 詳細: 必要に応じて適切な列を選択し、すべてのフィールドを読み取るためにSELECT *を使用するのは避けてください。このような操作はネットワーク帯域幅を消費するためです。カバーするインデックスを効果的に使用するには、クエリ対象のフィールドをインデックスに追加することを検討してください。

フィールドで関数を使用する

  • 基本原則: クエリされたフィールドに対して関連する関数を使用できます。インデックスの失敗を回避するには、 WHERE句のフィルターされたフィールドに対して、データ型変換関数などの関数を使用しないでください。式インデックスの使用を検討してください。

  • 詳細な説明:

    推奨されません:

    SELECT gmt_create FROM ... WHERE DATE_FORMAT(gmt_create, '%Y%m%d %H:%i:%s') = '20090101 00:00:00'

    おすすめされた:

    SELECT DATE_FORMAT(gmt_create, '%Y%m%d %H:%i:%s') FROM ... WHERE gmt_create = str_to_date('20090101 00:00:00', '%Y%m%d %H:%i:%s')

その他の仕様

  • WHERE条件のインデックス列に対して数学演算や関数を実行しないでください。
  • OR INまたはUNIONに置き換えます。 INの数は300未満でなければなりません。
  • ファジープレフィックスクエリには%プレフィックスを使用しないでください。
  • アプリケーションが SQL を実行するためにマルチ ステートメントを使用する場合、つまり、複数の SQL がセミコロンで結合され、一度に実行するためにクライアントに送信される場合、TiDB は最初の SQL 実行の結果のみを返します。
  • 式を使用する場合は、その式がstorageレイヤー(TiKV またはTiFlash) へのコンピューティング プッシュダウンをサポートしているかどうかを確認してください。そうでない場合は、より多くのメモリ消費が発生し、さらには TiDBレイヤーでの OOM が発生することが予想されます。storageレイヤーにプッシュできるコンピューティングは次のとおりです。

このページは役に立ちましたか?