検索

ホームページ  >  に質問  >  本文

MySQL インデックスクエリの効率の問題について

リーリー

2 つの SQL ステートメント、後者のランタイムは実行時間を意味し、データ量は 150W

フィールドの説明 zhuanid は数値です。 webid は数値です。 空は 0 または 1 です。

SQL の最初の文で使用される共通インデックスは、zhuanid webid の空の番号のインデックスのセットです。
SQL の 2 番目の文で使用されるインデックスは、zhuanid webid の空のインデックスのセットです。Time と ID はインデックスのセット

最初の文のカウントにこれほど時間がかかるのはなぜですか?2 番目の文の複雑なクエリに比べて、非常に時間がかかりません。

世界只因有你世界只因有你2715日前1085

全員に返信(4)返信します

  • ringa_lee

    ringa_lee2017-06-22 11:56:39

    最初の文は SQL、リミット 1 です
    2 番目の文は SQL、リミット 0、10 です
    count に 150 万個のアイテムを数えるように依頼しました。最初の 10 個のアイテムをチェックするよりも速くしたいですか?

    返事
    0
  • PHP中文网

    PHP中文网2017-06-22 11:56:39

    私の推測: インデックス フィールドが null 非許容に設定されていないため、count(*) はインデックスを使用できません。

    さらに、これら 2 つのステートメント自体は同等ではありません。最初のステートメントはテーブル全体に対するものですが、2 番目のステートメントは同等ではないようです。

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-22 11:56:39

    最初の SQL 結果セットが非常に大きい場合は、条件を満たすすべてのレコードをスキャンする必要があります。この場合、2 番目の SQL は時間 ID インデックスを使用するだけで済みます。条件を満たす 10 件のレコードを見つけるだけです。さらに、zhuanid 空の webid の結合インデックスは、zhuanid 列と webid の範囲部分のみを使用します。

    返事
    0
  • 为情所困

    为情所困2017-06-22 11:56:39

    最初の SQL が実行された後、結果はキャッシュに保存されます。

    2 番目の SQL の実行は最初の SQL のキャッシュに依存するため、より高速になります (実際には 2 番目の SQL はソートを使用するため、遅くなるはずです)。

    最初の SQL が実行された後にポスターを実行できます

    リーリー

    キャッシュをリセットしてから 2 番目の SQL を実行すると、結果は異なります。

    返事
    0
  • キャンセル返事