ホームページ >バックエンド開発 >PHPチュートリアル >MySQLクエリが遅すぎる、それを解決する方法

MySQLクエリが遅すぎる、それを解決する方法

WBOY
WBOYオリジナル
2016-06-13 12:22:41995ブラウズ

mysql クエリは非常に遅いです
SELECT a.`order_id` 、 a.`delivery_date` 、 a.`buyer_name` 、 a.`order_status` 、 a.`account` 、 a.`delivery_warehouse`
FROM `Sale_Order ` a
LEFT JOIN `Sale_Order_de` b ON a.`order_id` = b.`order_id`

GROUP BY a.`order_id`
ORDER BY find_in_set( a.`order_status`, ' 4 ,1,5,6,2,0,7' )

上記のクエリは非常に遅く、3 ~ 5 秒かかります。なぜなら、フィルタリング条件も必要だからです。条件を追加しないと速すぎます。遅い

explain result:

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE a ALL NULL NULL NULL 38472 一時ファイルを使用します。
1 SIMPLE b ref OrderId,order_id,order_id_2,order_id_3,order_id_4,order_id_5,order_id_6 OrderId 152 Demon.a.order_id 1 インデックスの使用


2 つのテーブルにはそれぞれ 30,000 件を超えるレコードがあります。彼らはそんなに遅いでしょうか?テーブルAがインデックスを使用していないからでしょうか? ?しかし、私は各フィールドのインデックスをクリックしました



------解決策のアイデア------ - ----
あなたのような状況に遭遇したとき、私は通常次のことを行います:
1. まず左結合と以下をコメントアウトし、次に a テーブルに関連する where を追加します ( If条件付きフィールドのインデックスを追加しないと、確実に有効になりません)
2. 次に、実行ステータスを確認し、順番にコメント セクションを開いて、実行ステータスをもう一度確認します。

また、条件付きでテーブル全体をスキャンしていないため、
selct_type は ALL です。
------ソリューションのアイデア----- ------------------ORDER BY find_in_set( a.`order_status` , '4,1,5,6,2,0,7' ) はい パフォーマンスに重大な影響を与えるもの

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。