SQL開発仕様
r
T
O
このドキュメントでは、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
に置き換えてください。7IN
数は300
未満でなければなりません。- あいまいプレフィックスクエリにはプレフィックス
%
使用しないでください。 - アプリケーションがマルチステートメントを使用して SQL を実行する場合、つまり複数の SQL がセミコロンで結合され、一度にクライアントに送信されて実行される場合、TiDB は最初の SQL 実行の結果のみを返します。
- 式を使用する場合は、その式がstorageレイヤー(TiKVまたはTiFlash )へのコンピューティングのプッシュダウンをサポートしているかどうかを確認してください。サポートされていない場合は、TiDBレイヤーでメモリ消費量が増加し、OOMが発生する可能性が高くなります。storageレイヤーにプッシュダウンできるコンピューティングは以下の通りです。
ヘルプが必要ですか?
不和またはスラック 、あるいはサポートチケットを送信するについてコミュニティに質問してください。
SQL Development Specifications最終更新日 4/17/2025, 6:32:14 AM: fix some grammar issues and typo (#20784) (#20791)