【发布时间】:2015-09-26 16:12:15
【问题描述】:
如何优化以下查询
CREATE TABLE $fullTableName AS (
SELECT COUNT(*) AS `impCnt`,
IF(COUNT(*)>7,7,COUNT(*)) AS `impGroup`,
MIN(ad.`created`) AS `dateFirstImp`,
ad.sid,
IF(cl.`clicks` IS NULL, 0, cl.`clicks`) AS `clickCnt`,
st.`panelistID` AS panelistID,
SUBSTRING_INDEX(GROUP_CONCAT(NULLIF(lbs.`site`, '') ORDER BY lbs.`table-order`,lbs.`value-order` ASC SEPARATOR '~'),'~',1) as 'site',
SUBSTRING_INDEX(GROUP_CONCAT(NULLIF(lbs.`dimension`, '') ORDER BY lbs.`table-order`,lbs.`value-order` ASC SEPARATOR '~'),'~',1) as 'dimension'
FROM table1 ad
LEFT JOIN (
SELECT t.`parameter` as 'parameter', v.`value` as 'value',
IF(FIND_IN_SET('site',t.attributes),v.`site`,null) as 'site',
IF(FIND_IN_SET('placement',t.attributes),v.`placement`,null) as 'placement',
IF(FIND_IN_SET('format',t.attributes),v.`format`,null) as 'format',
IF(FIND_IN_SET('creative',t.attributes),v.`creative`,null) as 'creative',
IF(FIND_IN_SET('mediaOwner',t.attributes),v.`mediaOwner`,null) as 'mediaOwner',
IF(FIND_IN_SET('targeting',t.attributes),v.`targeting`,null) as 'targeting',
IF(FIND_IN_SET('dimension',t.attributes),v.`dimension`,null) as 'dimension',
t.`order` as 'table-order', v.`order` as 'value-order' FROM table2 t
JOIN table3 v ON (t.tableID=v.tableID) WHERE t.campaignID = 1856
AND t.`active`=1 AND t.`ignore`=0 ORDER BY t.`order`,v.`order`
) lbs ON ($string)
LEFT JOIN (
SELECT cl2.`memberid` as memberid,
cl2.`panelid` as panelid,COUNT(*) as clicks
FROM table4 cl2 WHERE 1 AND (1) GROUP BY cl2.`memberid`,cl2.`panelid`
) cl
ON (ad.`memberid`=cl.`memberid` AND ad.`panelid`=cl.`panelid`)
LEFT JOIN table5 st
ON (ad.`memberid`=st.`panelistID` AND ad.`panelid`=st.`panelID`)
JOIN table6 ef
ON (ef.`panelID`=st.`panelID` AND ef.`panelistID`=st.`panelistID`)
WHERE 1 AND (1) GROUP BY ad.`memberid`, ad.`panelid` ORDER BY ad.`memberid` ASC, ad.`panelid` ASC)
【问题讨论】:
-
您是否检查过与查询优化有关的类似问题?如果没有,请检查它们并注意查询中提供的信息。如果您不这样做,那么没有人可以帮助您优化查询(我们没有您的数据,我们没有相同的 MySQL 设置/服务器硬件,因此我们无法运行查询)。跨度>
-
我们来看看
EXPLAIN SELECT ...和SHOW CREATE TABLE。 -
JOIN ( SELECT ... ) JOIN ( SELECT ... )效率特别低;你能避免这样的多个子查询吗?
标签: php mysql optimization