Emanuel Calvo Franco escribió:
> 
> Crees que se indices? mmmh IMHO no es eso, debido a que con inner le
> tarda menos,
> podría pasar por otra cosa.
> 
> Jose, el EXPLAIN nos dará la luz ;)


He aquí los Explain, primero para la consulta original (LEFT JOIN) y luego para 
la
consulta modificada (INNER JOIN)


********************************************************************************
mysql> EXPLAIN SELECT leads.id, leads_cstm.web_c, 
leads_cstm.potencialproducto_c,
leads_cstm.rubro_c, leads_cstm.subrubro_c, leads_cstm.interesado_en_c,
leads_cstm.encuesta_c, CONCAT( IFNULL( leads.first_name, '' ) , ' ', IFNULL(
leads.last_name, '' ) ) AS name, leads.first_name, leads.last_name, 
leads.salutation,
leads.status, leads.account_name, leads.account_id, jt0.user_name 
assigned_user_name,
jt0.created_by assigned_user_name_owner, 'Users'assigned_user_name_mod,
leads.date_entered, leads.assigned_user_id
    -> FROM leads
    -> LEFT JOIN leads_cstm ON leads.id = leads_cstm.id_c
    -> LEFT JOIN users jt0 ON jt0.id = leads.assigned_user_id
    -> AND jt0.deleted =0
    -> AND jt0.deleted =0
    -> WHERE leads.deleted =0
    -> ORDER BY name ASC
    -> LIMIT 0 , 51;
+----+-------------+------------+--------+---------------+--------------+---------+------------------------------+------+----------------------------------------------+
| id | select_type | table      | type   | possible_keys | key          | 
key_len | ref
                       | rows | Extra                                        |
+----+-------------+------------+--------+---------------+--------------+---------+------------------------------+------+----------------------------------------------+
|  1 | SIMPLE      | leads      | range  | idx_del_user  | idx_del_user | 2     
  | NULL
                       | 7810 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | leads_cstm | ALL    | NULL          | NULL         | NULL  
  | NULL
                       | 8129 |                                              |
|  1 | SIMPLE      | jt0        | eq_ref | PRIMARY       | PRIMARY      | 108   
  |
sugar.leads.assigned_user_id |    1 |                                           
   |
+----+-------------+------------+--------+---------------+--------------+---------+------------------------------+------+----------------------------------------------+
3 rows in set (0,00 sec)

********************************************************************************
mysql> EXPLAIN SELECT leads.id, leads_cstm.web_c, 
leads_cstm.potencialproducto_c,
leads_cstm.rubro_c, leads_cstm.subrubro_c, leads_cstm.interesado_en_c,
leads_cstm.encuesta_c, CONCAT( IFNULL( leads.first_name, '' ) , ' ', IFNULL(
leads.last_name, '' ) ) AS name, leads.first_name, leads.last_name, 
leads.salutation,
leads.status, leads.account_name, leads.account_id, jt0.user_name 
assigned_user_name,
jt0.created_by assigned_user_name_owner, 'Users'assigned_user_name_mod,
leads.date_entered, leads.assigned_user_id
    -> FROM leads
    -> INNER JOIN leads_cstm ON leads.id = leads_cstm.id_c
    -> INNER JOIN users jt0 ON jt0.id = leads.assigned_user_id
    -> AND jt0.deleted =0
    -> AND jt0.deleted =0
    -> WHERE leads.deleted =0
    -> ORDER BY name ASC
    -> LIMIT 0 , 51;
+----+-------------+------------+--------+----------------------------------------+---------+---------+------------------------------+------+---------------------------------+
| id | select_type | table      | type   | possible_keys                        
  | key
  | key_len | ref                          | rows | Extra                       
    |
+----+-------------+------------+--------+----------------------------------------+---------+---------+------------------------------+------+---------------------------------+
|  1 | SIMPLE      | leads_cstm | ALL    | NULL                                 
  | NULL
  | NULL    | NULL                         | 8129 | Using temporary; Using 
filesort |
|  1 | SIMPLE      | leads      | eq_ref | 
PRIMARY,idx_del_user,idx_lead_assigned |
PRIMARY | 108     | func                         |    1 | Using where           
          |
|  1 | SIMPLE      | jt0        | eq_ref | PRIMARY                              
  |
PRIMARY | 108     | sugar.leads.assigned_user_id |    1 | Using where           
          |
+----+-------------+------------+--------+----------------------------------------+---------+---------+------------------------------+------+---------------------------------+
3 rows in set (0,00 sec)

********************************************************************************

Por lo que veo, con INNER JOIN (y con RIGHT JOIN también), MySQL utiliza los 
índices:
"PRIMARY,idx_del_user,idx_lead_assigned" para la tabla "leads", pero con LEFT 
JOIN utiliza
sólo el índice "idx_del_user".

Ahora estoy viendo qué índice crear para que el LEFT JOIN lo tome...

Abrazos
-- 
José C. Massón

.: Rebeldes Stereotipos
Sábados 15 a 17 hs FM La Tribu 88.7 MHz
rebeldes.org.ar
--
Para desuscribirte tenés que visitar la página
https://listas.linux.org.ar/mailman/listinfo/lugar-gral/
Usuarios Software Libre Argentina (USLA)

Responder a