0

声明がある場合:

select .. from .. where condition;

そして、条件が false になる最大回数を事前に知っています。パフォーマンスを向上させるために、MySQL にこの数値を伝えるにはどうすればよいですか? そのため、(レコードの選択中に) 条件が何度も false になった後、MYSQL は残りのレコードについて条件が true であると想定します。

編集:

私の質問に何が欠けているのかわかりません。空欄を埋めます:

select * from t where c3 > c2;

ここで、50 件のレコードのうち、条件「c3 > c2」が false であるレコードは 5 件だけであることを事前に知っています。この select ステートメントのパフォーマンスを向上させるために、MySQL にこの数字 '5' を伝えることができますか? そのため、この select ステートメントの実行中に、この条件 (c3 > c2) が 5 回偽になった後、MySQL は残りのレコードについてこの条件を無視し、それ以降すべてのレコードを選択します。

4

2 に答える 2

1

簡単な答えは、できません。

しかし、パフォーマンスを追求するためにできることは、スマートなデータベース設計と適切に配置されたインデックスです。

MySQL はインデックス カラムを「プリフォーマット」して、これらのカラムに対する where 制約を非常に高速にチェックできるようにします。

MySQL の Web サイト ( http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html ) には、インデックスを使用すべき理由がいくつか記載されていますが、その上位 2 つを以下に示します。そのページ全体を通して:

  • WHERE 句に一致する行をすばやく見つけるため。

  • 行を考慮から除外します。複数のインデックスから選択できる場合、MySQL は通常、行数が最も少ないインデックスを使用します。

また、よりスマートなテーブルを作成する方法の簡単な例として、「John Doe」という名前を 1 つの列に格納する代わりに、2 つの列に格納して、分割したり LIKE を実行したりせずに「Doe」という姓を持つ人を検索できるようにすることもできます。検索します。

LIKE などの条件は、どのように記述しても遅くて退屈なので、避けるようにしてください。

ロジックを実行する最速の列には、integer 列と float 列があります。

于 2012-09-24T21:14:24.153 に答える
1

当面の問題の詳細な説明がなければ、データベースがどのように機能するかについてのあなたの理解がかなり欠けているように見える以上のことを言うことはできないと思います.

簡単にするために、二分探索木を想像してください。次に、述語 (where 条件) を使用して、クエリの結果を取得するのに役立つ二分探索ツリーを構築する方法を検討します。簡単な例として、次のクエリを検討してください。

SELECT * FROM myTable WHERE some_value = 10

「some_value」の単純な二分探索木 (つまり、二分探索木 - ツリー内の各ノードについて、現在の行よりも低い「some_value」を持つ他の行が左に移動し、それ以上の行または等しい行が左に移動します。 - 値は右に移動します) - この状況で役立ちます。このような二分探索ツリーを利用すると、現在のノードの値に応じてツリーの左または右のパスをたどり、値「10」に到達するまで、ツリーのルートから簡単にたどることができます。より高い値が見つかるまで正しい道をたどってください。

これが次のようなクエリでどのように機能するか想像できます。

SELECT * FROM myTable WHERE some_value BETWEEN 10 AND 20

繰り返しますが、同じ単純な二分探索木でこのクエリに簡単に答えることができます。もちろん、もっと複雑な例に深く入り込むことは簡単にできますが、この時点で、あなたは次のように考えていると思います。

これに対する答えはインデックスです - この場合:

CREATE INDEX idx_myTable__some_value ON myTable(some_value);

これにより、MySQL はテーブル "myTable" の列 (指定された順序) "some_value" にインデックスを作成し、インデックスは "idx_myTable__some_value" という名前になります。

これは、このような簡単な答えでできる限り、このトピックにあると思います。ただし、上記は単純化しすぎていることを述べさせてください。これについては、さらに多くのことが言えます。まず、実際に使用されるインデックスの種類は、通常、二分探索ツリーではなく、B ツリー (または、より可能性が高い) です。 、B+ ツリー)。ウィキペディアにはこれに関する適切な記事がいくつかあり、MySQL の実際のマニュアルもこれを十分にカバーしているはずです。

于 2012-09-24T21:21:04.947 に答える