簡體   English   中英

優化SQL查詢

[英]Optimize SQL Query

我在MySQL DB上有以下查詢:

SELECT *  , r.id, x.real_name AS u_real_name, u.real_name AS v_real_name, y.real_name AS v_real_name2
FROM url_urlaube r
LEFT JOIN g_users u ON ( r.v_id = u.id )
LEFT JOIN g_users x ON ( r.u_id = x.id )
LEFT JOIN g_users y ON ( r.v_id2 = y.id )
WHERE (
(
FROM_UNIXTIME( 1283205600 ) >= r.from
AND FROM_UNIXTIME( 1283205600 ) <= r.to
)
OR (
FROM_UNIXTIME( 1280613600 ) >= r.from
AND FROM_UNIXTIME( 1280613600 ) <= r.to
)
OR (
FROM_UNIXTIME( 1280613600 ) < r.from
AND FROM_UNIXTIME( 1283205600 ) > r.to
)
)
ORDER BY r.from ASC

我試圖通過在(r.from,r.to)上添加索引來優化此查詢,但是我沒有工作。

當我讓我解釋這個查詢時,它說:

+----+-------------+-------+--------+---------------+---------+---------+-------------+------+-----------------------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref         | rows | Extra                       |
+----+-------------+-------+--------+---------------+---------+---------+-------------+------+-----------------------------+
|  1 | SIMPLE      | r     | ALL    | from          | NULL    | NULL    | NULL        |   42 | Using where; Using filesort |
|  1 | SIMPLE      | u     | eq_ref | PRIMARY       | PRIMARY | 4       | res.r.v_id  |    1 |                             |
|  1 | SIMPLE      | x     | eq_ref | PRIMARY       | PRIMARY | 4       | res.r.u_id  |    1 |                             |
|  1 | SIMPLE      | y     | eq_ref | PRIMARY       | PRIMARY | 4       | res.r.v_id2 |    1 |                             |
+----+-------------+-------+--------+---------------+---------+---------+-------------+------+-----------------------------+
4 rows in set (0.00 sec)

為什么?

謝謝你的幫助。

復合索引在這里無濟於事,因為您的條件具有不同的比較功能。 嘗試在r.from和r.to上添加單獨的索引。 實際上,我認為r.from上的一個索引就足夠了。

暫無
暫無

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

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