私はかなり手がけているサイドプロジェクトに取り組んでいます。私の質問は、それ以上のデータ処理が必要かどうかを判断するためにBOOLEAN値を使用するときに得られた効率に関するものです。BOOLEAN値を使用したSQL(mySQL)の最適化
例:すべてのクリーチャーをリストした表がある場合。関係性のある別の表では、冬眠中の期間、および冬眠中に毎日消費されるカロリーを記載しています。
(Creatures)テーブルの内部に「休止状態」BOOLEANの値を入れることは効率的ですか?
trueの場合は、「hibernation_creature_info_relations」テーブルに移動し、そのIDを持つクリーチャーを見つけて、その情報を返します。
これは、 "hibernates" = falseの値を持つすべてのクリーチャーに対して、SQLが "hibernation_creature_info_relations"の大きなテーブルを検索するのを防ぐことを意味します。
IDを使用している場合は、「hibernation_creature_info_relations」テーブルをすばやく確認するプロセスが非常に速いため、ハイバネーションの値が設定されている場合に基づいて何を行うかの引数を処理する必要があるため、真か偽か?
私はこれが私に求めていることを理解するのに役立つ情報であったと思いますが、もし私が言いたいのであれば、私は言い換えることができます。
他のテーブルで休止フィールドを複製する必要はありません。データセットのサイズを縮小することによる速度の向上は、最初に元のテーブルに戻って結合することによって相殺されます。 –
また、命令型言語とは異なり、(通常は)SQLの実行順序付け/最適化をほとんど制御できません。これはオプティマイザの仕事であり、ジョインの並べ替え、テーブルスキャンの使用、インデックスの切り替え、異なる順序の選択、一時テーブルの作成など、クエリを高速化するためにさまざまなことを行うことができます。特に結合の文脈では、短絡論理のようなものはまったくありません(オプティマイザは、合っていると見て自由にそれらを混乱させる)。 –