数据库 - MySQL 单表500W+数据,查询超时,如何优化呢?
伊谢尔伦
伊谢尔伦 2017-04-17 16:51:13
0
4
752
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(4)
刘奇

理由は、record_global_id 属性をフィルタリングしていますが、条件が等しくないため、複合インデックス以降の部分は使用されません。

status 列はどのように区別されますか?インデックス (status, record_global_id) を追加して試してみてください。

いいねを押す +0
伊谢尔伦

複数の SQL に分割して個別にクエリを実行します。

いいねを押す +0
巴扎黑

質問によると、SQL には非常に多くの条件がありますが、使用できるインデックスは 1 つだけです。次の 'OR':

は非常に明白です。 リーリー

全体の大きな WHERE は 2 つの部分に分割できます。アイデアは UNION です。役に立った場合は、SQL 結果を直接投稿します。^_^

変換後の SQL:

リーリー

うまくいったら、実行計画のスクリーンショットをコメントに送っていただけますか?自分の疑惑を検証したいのですが、ありがとう!

いいねを押す +0
左手右手慢动作

複合インデックス (from_uid,to_uid,from_type,to_type,type,status,record_global_id) を作成します
次のように SQL を Union に変更します:

リーリー

from_uid、to_uid、from_type、to_type、type、status に基づいてフィルタリングされた結果セットが小さい場合は、ユニオン サブクエリに AND を追加する必要はありません。record_global_id < 5407938 ORDER BY record_global_id DESC LIMIT 0, 20

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!