Как я могу ускорить MySQL запрос при использовании выбора, используя счетчик (отличный) запрос - PullRequest
1 голос
/ 12 ноября 2011

Может кто-нибудь сказать, пожалуйста, как я могу использовать, чтобы ускорить этот запрос MySQL.Я знаю, что в настоящее время он работает медленно из-за синтаксиса count (отличный subcontractorRef).Любые другие альтернативы?

SELECT DISTINCT (contractorsRef) AS cref, RIDGROUP AS ridg,  
    (select count(DISTINCT subcontractorRef) 
    FROM request 
    INNER JOIN request_config ON request_config.RIDGROUP = request.RIDGROUP 
    WHERE request_config.contractorsRef = outer_config.contractorsRef  
    AND currenttaxyear =2011 
    AND weekno =31) AS xxx 
FROM request_config outer_config 
WHERE currenttaxyear =2011 
AND weekno =32 
AND contractorsRef <>132 

Ответы [ 2 ]

1 голос
/ 12 ноября 2011

Попробуйте использовать JOIN вместо подзапроса:

SELECT
    contractorsRef AS cref,
    RIDGROUP AS ridg,
    IFNULL(T1.subcontractorCount, 0) AS xxx
FROM request_config AS outer_config
LEFT JOIN
(
    SELECT
        request_config.contractorsRef,
        COUNT(DISTINCT subcontractorRef) AS subcontractorCount
    FROM request 
    INNER JOIN request_config
    ON request_config.RIDGROUP = request.RIDGROUP 
    AND currenttaxyear = 2011 
    AND weekno = 31
    GROUP BY contractorsRef
) T1
ON T1.contractorsRef = outer_config.contractorsRef 
WHERE currenttaxyear = 2011 
AND weekno = 32 
AND contractorsRef <> 132
GROUP BY outer_config.contractorsRef
0 голосов
/ 13 ноября 2011

Предположение, так как мы не знаем никаких индексов. Но очень распространенной ошибкой является отсутствие индекса, охватывающего все таблицы в предложении where. пример из вашего внешнего выбора:

FROM request_config ГДЕ currenttaxyear = 2011 AND weekno = 32 И подрядчикиRef <> 132

Тогда вам нужен индекс: создать индекс mynewIndex для request_config (currenttaxyear, weekno, contractorsRef) порядок столбцов в этом индексе может иметь большое значение. Поэтому попытайтесь изменить их в abit.

...