簡體   English   中英

MYSQL 查詢花費太多時間用於錯誤場景

[英]MYSQL Query taking too much time for false scenarios

我有一個這樣的查詢,

select o.order_id FROM orders o WHERE o.order_name = 'XL' AND o.order_status='SUCCESS' AND o.order_type='LARGE' ORDER by o.created_at ASC limit 1;

當它有一個返回值時,它工作正常。 但是對於查詢沒有要返回的記錄的情況,執行起來需要很長時間。

我在 created_at(idx_created_at) 和 (order_name, order_status, order_type)(idx_name_status_type) 上添加了單獨的索引,但沒有任何改進。

這是查詢計划

+----+-------------+-------+------------+------+-----------------------------------------------------------+---------------------+---------+-------+------+----------+----------------------------------------------------+
| id | select_type | table | partitions | type | possible_keys                                             | key                 | key_len | ref   | rows | filtered | Extra                                              |
+----+-------------+-------+------------+------+-----------------------------------------------------------+---------------------+---------+-------+------+----------+----------------------------------------------------+
|  1 | SIMPLE      | o     | NULL       | ref  | orders_order_status,idx_name_status_type | orders_order_status | 1       | const |    1 |     5.00 | Using index condition; Using where; Using filesort |
+----+-------------+-------+------------+------+-----------------------------------------------------------+---------------------+---------+-------+------+----------+----------------------------------------------------+

您能否讓我知道可能導致此問題的原因。

首先,您正在使用執行計划中的索引,我將在idx_name_status_type索引中添加created_at列,因為您正在ORDER by o.created_at ASC limit 1 ,它將嘗試在查詢過濾條件后對結果集進行排序。

CREATE INDEX idx_name_status_type 
ON orders (order_name, order_status, order_type,created_at);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM