[英]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.