Mysql o在不了解表格结构的情况下提供帮助。但是,WHERE子句限制了要分析的行数,而如果WHERE子句不存在,则将执行完整的表扫描,因此您的结果是预期的。我可以建议的是将查询剥离到最小值,然后逐个添加连接,直到您开始看到查询性能的显著提升,然后再进行处理。此外,
Mysql o在不了解表格结构的情况下提供帮助。但是,WHERE子句限制了要分析的行数,而如果WHERE子句不存在,则将执行完整的表扫描,因此您的结果是预期的。我可以建议的是将查询剥离到最小值,然后逐个添加连接,直到您开始看到查询性能的显著提升,然后再进行处理。此外,,mysql,Mysql,o在不了解表格结构的情况下提供帮助。但是,WHERE子句限制了要分析的行数,而如果WHERE子句不存在,则将执行完整的表扫描,因此您的结果是预期的。我可以建议的是将查询剥离到最小值,然后逐个添加连接,直到您开始看到查询性能的显著提升,然后再进行处理。此外,嵌套的select FROM LK_标记LT是一个瓶颈,因为它将针对每个元组运行,这意味着如果您正在进行完整的表扫描(即,无WHERE子句),那么它将针对每一行运行。在M_CLIENT_INFO表中有多少行?您可能会生成太多的结果,以至于数据库
o在不了解表格结构的情况下提供帮助。但是,WHERE子句限制了要分析的行数,而如果WHERE子句不存在,则将执行完整的表扫描,因此您的结果是预期的。我可以建议的是将查询剥离到最小值,然后逐个添加连接,直到您开始看到查询性能的显著提升,然后再进行处理。此外,嵌套的select FROM LK_标记LT是一个瓶颈,因为它将针对每个元组运行,这意味着如果您正在进行完整的表扫描(即,无WHERE子句),那么它将针对每一行运行。在
M_CLIENT_INFO
表中有多少行?您可能会生成太多的结果,以至于数据库或MySQL工作台的链接都饱和了。请张贴你的执行计划。请尝试从CLI进行查询。@crafter:谢谢,我会回来做更多解释。@RandomSeed如果您将where子句更改为where YEAR(MCI.DATE\u ADDED)不为NULL,它将在合理的时间内提供输出吗?
SELECT
MCI.CLIENT_ID AS CLIENT_ID, MCI.NAME AS CLIENT_NAME, MCI.PRIMARY_CONTACT AS CLIENT_PRIMARY_CONTACT,
MCI.ADDED_BY AS SP_ID, CONCAT(MUD_SP.FIRST_NAME, ' ', MUD_SP.LAST_NAME) AS SP_NAME,
MCI.FK_PROSPECT_ID AS PROSPECT_ID, MCI.DATE_ADDED AS ADDED_ON,
(SELECT GROUP_CONCAT(LT.TAG_TEXT SEPARATOR ', ')
FROM LK_TAG LT
INNER JOIN M_OBJECT_TAG_MAPPING MOTM
ON LT.PK_ID = MOTM.FK_TAG_ID
WHERE MOTM.FK_OBJECT_ID = MCI.FK_PROSPECT_ID
AND MOTM.OBJECT_TYPE = 1
AND MOTM.IS_ACTIVE = 1
) AS TAGS,
IFNULL(SUM(GET_DIGITS(MMR.RCP_AMOUNT)), 0) AS REVENUE_SO_FAR,
IFNULL(SUM(GET_DIGITS(MMR.RCP_RUPEES)), 0) AS REVENUE_INR,
COUNT(DISTINCT PMI_MONTHLY.PROJECT_ID) AS MONTHLY,
COUNT(DISTINCT PMI_FIXED.PROJECT_ID) AS FIXED,
COUNT(DISTINCT PMI_HOURLY.PROJECT_ID) AS HOURLY,
COUNT(DISTINCT PMI_ANNUAL.PROJECT_ID) AS ANNUAL,
COUNT(DISTINCT PMI_CURRENTLY_RUNNING.PROJECT_ID) AS CURRENTLY_RUNNING_PROJECTS,
COUNT(DISTINCT PMI_YET_TO_START.PROJECT_ID) AS YET_TO_START_PROJECTS,
COUNT(DISTINCT PMI_TECH_SALES_CLOSED.PROJECT_ID) AS TECH_SALES_CLOSED_PROJECTS
FROM
M_CLIENT_INFO MCI
INNER JOIN M_USER_DETAILS MUD_SP
ON MCI.ADDED_BY = MUD_SP.PK_ID
LEFT OUTER JOIN M_MONTH_RECEIPT MMR
ON MMR.CLIENT_ID = MCI.CLIENT_ID
LEFT OUTER JOIN M_PROJECT_INFO PMI_FIXED
ON PMI_FIXED.CLIENT_ID = MCI.CLIENT_ID AND PMI_FIXED.PROJECT_TYPE = 1
LEFT OUTER JOIN M_PROJECT_INFO PMI_MONTHLY
ON PMI_MONTHLY.CLIENT_ID = MCI.CLIENT_ID AND PMI_MONTHLY.PROJECT_TYPE = 2
LEFT OUTER JOIN M_PROJECT_INFO PMI_HOURLY
ON PMI_HOURLY.CLIENT_ID = MCI.CLIENT_ID AND PMI_HOURLY.PROJECT_TYPE = 3
LEFT OUTER JOIN M_PROJECT_INFO PMI_ANNUAL
ON PMI_ANNUAL.CLIENT_ID = MCI.CLIENT_ID AND PMI_ANNUAL.PROJECT_TYPE = 4
LEFT OUTER JOIN M_PROJECT_INFO PMI_CURRENTLY_RUNNING
ON PMI_CURRENTLY_RUNNING.CLIENT_ID = MCI.CLIENT_ID AND PMI_CURRENTLY_RUNNING.STATUS = 4
LEFT OUTER JOIN M_PROJECT_INFO PMI_YET_TO_START
ON PMI_YET_TO_START.CLIENT_ID = MCI.CLIENT_ID AND PMI_YET_TO_START.STATUS < 4
LEFT OUTER JOIN M_PROJECT_INFO PMI_TECH_SALES_CLOSED
ON PMI_TECH_SALES_CLOSED.CLIENT_ID = MCI.CLIENT_ID AND PMI_TECH_SALES_CLOSED.STATUS > 4
WHERE YEAR(MCI.DATE_ADDED) = '2012'
GROUP BY MCI.CLIENT_ID ORDER BY CLIENT_NAME ASC
where 1 = 1
select
PQ.*,
group_concat(...) tags
from
( the entire primary part of the query ) as PQ
Left join yourGroupConcatTableBasis on key columns