2013-11-27 1 views
2

мне нужно запросить таблицу InnoDB (100 Millon строки), но это невозможно Beause его заблокировать таблицу и останавливает мое приложение (должен продолжать работать на выполнение запроса)Копирование TMP таблицы на диске MySQL занимает слишком много времени

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, но не получил никаких результатов.

+0

Какой запрос вы выполняете? какой тип двигателя вы используете? –

+0

@JungsuHeo im использует таблицу innodb. Это SELECT SQL_NO_CACHE из таблицы с 150-метровыми строками и 15-ю объединениями с группами по и подсчетам. Это процесс хранения данных, который мне нужно запускать каждую ночь. –

+0

Благодарим за сообщение. не могли бы вы дать нам более подробную информацию? что-то вроде этого. http://dba.stackexchange.com/questions/16172/trying-to-optimize-query-for-performance-mysql. то другие люди могут вам помочь. Благодарю. –

ответ

0

Вы присоединяетесь вместе 14 столов!

Основываясь на моем опыте, в 99% случаев, подобных этому, оказывается, что добавление индекса фиксирует вещи.

Посмотрите на все ON table1.field1 = table2.field2 и убедитесь, что table1 имеет индекс на field1 и table2 имеет индекс FIELD2.

Смежные вопросы