-2

510,085 行のテーブルがあるため、より高いパフォーマンスを求めるようになりました。このテーブルのフィールドの 1 つは「photoStatus」と呼ばれます。

「photoStatus」では、510,045 行に「Active」という単語が含まれ、残りの 40 行には「Suspended」という単語が含まれています。

次の 2 つのクエリのどちらが「アクティブな」写真を検索するのに速いでしょうか?それとも問題ではありませんか?

WHERE photoStatus = 'Active'

Or

WHERE photoStatus <> 'Suspended'

明らかに、これは大規模なクエリの一部であり、単なる WHERE 条件ではありません。

データベースは MySQL (MyISAM)

4

9 に答える 9

2

列をブール値または数値に変換しないのはなぜですか。これは、文字列の比較よりもはるかに高速です。次のようにするだけです。

  ....
  WHERE isActive;
于 2012-04-17T05:13:42.327 に答える
0

まず、.5M行は大きなテーブルではありません-とにかく。

「アクティブ」/「非アクティブ」のような列は、インデックススキャンを有益にするのに十分な選択性がないため、それ自体がインデックスになるのはかなり役に立たない可能性があります(実際、テーブル、テーブルスキャンの方がおそらく良いでしょう)。

実際、「アクティブ」は問題とは何の関係もないのではないかと思います。結局のところ、クライアントに.5M行を返そうとしているのではないでしょうか。

.5M行を返すクエリは高速ではありません。これは、行を返すだけで(比較的)長い時間がかかるためです。

とにかく私の答え:それは違いはありません、あなたはあなたのクエリの他の部分をチェックする必要があります。完全なクエリ、テーブル構造、および説明の出力を使用して質問を投稿します。

于 2012-04-17T07:30:30.060 に答える
0

そのフィールドには必ずインデックスを使用してください。そして、クエリを EXPLAIN して、クエリの効率性を確認します。

それ以外の場合、クエリは 40 だけを除外するため、残りのクエリは効率的である必要があります。

于 2012-04-17T05:15:59.590 に答える
0

どちらの方法でも、テーブルと行にインデックスを付ける必要があります。

個人的には常に一致します。等号を使用します。

WHERE photoStatus = 'Active'

文字列に一致させるよりも、常にintまたはbooleanを使用します..

于 2012-04-17T05:16:31.630 に答える
0

WHERE photoStatus = 'Active' は、例に似た小さなテストに基づいてその列にインデックスがある場合に適しています。

SQL Server でのクエリ実行を追加しました。短いものは等しい比較に属します。パフォーマンスの向上が報告されています。インデックスがない場合、クエリのコストは同様です。

statusname = 'アクティブ'

where statusname <> 'サスペンド'

于 2012-04-17T05:39:36.653 に答える
0

その列WHERE photoStatus = 'Active'にインデックスがある場合、サーバーはインデックス マッチングの範囲をスキャンするだけで済むため、高速になりますActive

于 2012-04-17T05:13:01.350 に答える
0

文字列全体を比較する必要がないため、2番目は「少し」高速になります。データベース比較アルゴリズムに従って結果を含めるには、最初の文字比較だけで十分です。

于 2012-04-17T05:13:17.033 に答える
0

実際に返される行の割合が大きすぎるため、このシナリオでは通常のインデックスは役に立ちません。

したがって、データベースは各行を調べる必要があります。equal vs !equal 比較の速度によっては、多少の違いがあるかもしれませんが、それは無視できるはずです。

したがって、結果はほぼ同じ速度になると思います。

于 2012-04-17T05:20:59.377 に答える
0

クエリのショートカットを見つけるために、いくつかの詳細に投稿しました。

どうやらフルスキャンが必要なようです。この場合、テーブルを並行して読み取ろうとすることができます。どの DBMS を使用しているかわかりませんが、Oracle ではヒントを使用できますselect /*+parallel(yourtable 8)*/ from yourtable

このデータで何をしようとしていますか? どのタイプのクエリが遅いですか? 例を挙げることができますか?多くのトリックがあり、多くの間違いを犯す可能性があります。また、すべてのクエリが高速に動作するわけではありません。UI 用の場合は、1 秒未満で応答する必要があります。ただし、管理タスクの場合は、1 分かかる場合があります :)

于 2012-04-17T05:25:29.990 に答える