复制到磁盘mysql上的tmp表需要太长时间

时间:2013-11-27 13:06:47

标签: mysql performance join inner-join

我需要查询一个InnoDB表(100行),但这是不可能的,因为它会锁定表并停止我的应用程序(必须继续运行查询执行)

QUERY:

EXPLAIN SELECT SQL_NO_CACHE ptown_billing.historial_cobros.FECHA, 
    "Cobro ok." as ESTADO,
    ptown_common.carriers.CARRIER as CARRIER,
    ptown_common.precios.DESCRIPCION as DESCRIPCION,
    SUM(ptown_common.precios.PRECIO_SIN_IVA) AS PRECIO_CLIENTE,        
    SUM(ptown_common.precios.COMISION) AS COMISION,  
    count(*) as CANTIDAD,      
    ptown_common.productos.producto as PRODUCTO,
    ptown_common.origen.origen AS ORIGEN,
    ptown_common.keywords.KEYWORD,
    ptown_common.shortcode.SHORTCODE,
    ptown_common.partners.PARTNER,
    ptown_common.empresas.EMPRESA  
FROM ptown_billing.historial_cobros
    INNER JOIN ptown_billing.cdr ON cdr.ID_CDR = historial_cobros.ID_CDR AND 
        cdr.DB_MODULO='ptown_suscripcion' 
    INNER JOIN ptown_suscripcion.transacciones  ON 
        ptown_suscripcion.transacciones.id_transaccion = ptown_billing.cdr.ID_TRANSACCION 
    INNER JOIN ptown_common.solicitudes  ON 
        ptown_common.solicitudes.ID_SOLICITUD = ptown_suscripcion.transacciones.ID_SOLICITUD  
    INNER JOIN ptown_common.keywords_partners ON 
        ptown_common.keywords_partners.ID = ptown_common.solicitudes.ID_KWPT 
    INNER JOIN ptown_common.partners ON 
        ptown_common.partners.ID_PARTNER = ptown_common.keywords_partners.ID_PARTNER  
    INNER JOIN ptown_common.empresas ON 
        ptown_common.empresas.ID_EMPRESA = ptown_common.keywords_partners.ID_EMPRESA  
    INNER JOIN ptown_common.keywords  ON 
        ptown_common.keywords.ID_KEYWORD = ptown_common.solicitudes.ID_KEYWORD           
    INNER JOIN ptown_common.carriers ON ptown_common.carriers.ID_CARRIER = ptown_billing.cdr.ID_CARRIER
    INNER JOIN ptown_common.productos_config ON 
        ptown_common.productos_config.id_configuracion = ptown_suscripcion.transacciones.id_configuracion 
    INNER JOIN ptown_common.shortcode  ON 
        ptown_common.shortcode.ID_SHORTCODE = ptown_common.productos_config.ID_SHORTCODE  
    INNER JOIN ptown_common.origen ON ptown_common.productos_config.id_origen = ptown_common.origen.id_origen        
    INNER JOIN ptown_common.productos ON ptown_common.productos.id_producto = ptown_common.productos_config.id_producto
    INNER JOIN ptown_common.precios ON ptown_billing.cdr.ID_PRECIO = ptown_common.precios.ID_PRECIO 
WHERE ptown_billing.historial_cobros.fecha = '2013-11-26' AND 
    ptown_billing.historial_cobros.respuesta = 000 
GROUP by FECHA,DESCRIPCION,CARRIER,PRODUCTO,ORIGEN,KEYWORD,SHORTCODE,PARTNER,EMPRESA

有什么建议吗?我尝试设置tmp_table_size = 51200但没有结果。

1 个答案:

答案 0 :(得分:0)

你们正在加入14个桌子!

根据我的经验,在这样的99%的案例中,事实证明添加索引可以解决问题。

查看所有ON table1.field1 = table2.field2,并确保 table1 field1 上包含索引, table2 的索引位于 field2