1
je requête suivante sur une base de données MySQL:Optimize SQL Query
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
j'ai essayé d'optimiser cette requête en ajoutant un index sur (r.from, r.to), mais je n'ai pas travaillé.
quand je me laisse expliquer cette requête, il dit:
+----+-------------+-------+--------+---------------+---------+---------+-------------+------+-----------------------------+
| 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)
pourquoi?
Nous vous remercions de votre aide.
Combien d'enregistrements y a-t-il dans la table url_urlaube - et combien sont renvoyés par votre requête? –
maintenant très peu, mais la base de données va croître en production –