Оптимизировать SQL-запрос - PullRequest
1 голос
/ 29 июля 2010

У меня следующий запрос к базе данных MySQL:

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)

почему

Спасибо за помощь.

1 Ответ

0 голосов
/ 29 июля 2010

Составной индекс вам здесь не поможет, потому что у вас есть условия с различными функциями сравнения.Попробуйте добавить отдельные индексы на r.from и r.to.На самом деле, я думаю, что одного индекса на r.from будет достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...