0

SELECTあまり具体的ではないWHERE句をSELECT使用したクエリと、より具体的な句を使用した別のクエリの間にパフォーマンスの向上があるかどうか疑問に思いましたWHERE

たとえば、クエリは次のとおりです。

SELECT * FROM table1 WHERE first_name='Georges';

これより遅い:

SELECT * FROM table1 WHERE first_name='Georges' AND nickname='Gigi';

言い換えれば、WHERE条項の精度に関連する時間的要因はありますか?

私の質問がデータベースクエリ(私の場合はMYSQL)に関係するすべてのコンポーネントを考慮に入れていても、私は非常に理解できるかどうかわかりません。

評価されたクエリセットをキャッシュしたいので、私の質問はDjangoフレームワークに関連しています。次のリクエストで、このキャッシュされた評価済みクエリセットを取り戻し、さらにフィルタリングして、もう一度評価します。

4

4 に答える 4

1

これについての厳格なルールはありません。

条項に条件を追加することで、パフォーマンスが向上または低下する可能性があります。これは、特にWHERE次の条件に依存するためです。

  • インデックス作成
  • スキーマ
  • データ量
  • データカーディナリティ
  • 統計学
  • クエリエンジンのインテリジェンス

データセットを使用してテストし、何が最高のパフォーマンスを発揮するかを判断する必要があります。

于 2012-07-19T15:00:52.680 に答える
1

MySqlサーバーは、WHERE句内のすべての列を比較する必要があります(すべてがで結合されている場合AND)。

したがって、列にインデックスがない場合、nickname2番目のクエリは少し遅くなります。

ここでは、列インデックスがどのように機能するかを読むことができます(質問に似た例を使用):http ://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

于 2012-07-19T15:02:29.203 に答える
1

この質問に答えるのは難しいと思います。あまりにも多くの側面(例:インデックス)が関係しています。最初のクエリは最初のクエリよりも高速だと思いますが、はっきりとは言えません。

これが重要な場合は、シミュレーションを実行して(たとえば、1'000'000のクエリを実行して)時間を確認してみませんか?

于 2012-07-19T15:03:09.547 に答える
1

はい、遅くなる可能性があります。それはすべてあなたが持っているインデックスとデータ分散に依存します。リンクを確認してくださいクエリ実行プランについて

クエリを実行するときにMySQLが何をするかを知る方法については。

于 2012-07-19T15:06:49.827 に答える