2010-07-29 11 views
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.

+0

Combien d'enregistrements y a-t-il dans la table url_urlaube - et combien sont renvoyés par votre requête? –

+0

maintenant très peu, mais la base de données va croître en production –

Répondre

0

L'index composé ne vous aidera pas ici car vous avez des conditions avec différentes fonctions de comparaison. Essayez d'ajouter des index séparés sur r.from et r.to. En fait, je pense qu'un indice sur r.from suffira.