SQL開発仕様
このドキュメントでは、SQL を使用するための一般的な開発仕様をいくつか紹介します。
テーブルの作成と削除
- 基本原則:テーブルの命名規則に従うことを前提に、業務プロセスの異常中断を防ぐために、テーブルの作成文と削除文をアプリケーション内部でパッケージ化し、判定ロジックを追加することを推奨します。
- 詳細: アプリケーション側での SQL コマンドの異常実行による異常中断を回避するために、
create table if not exists table_name
またはdrop table if exists table_name
ステートメントを追加してif
判定を追加することをお勧めします。
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レイヤーをプッシュダウンできるコンピューティングは次のとおりです。