Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL无法生成临时表(海量查询)_Mysql_Sql - Fatal编程技术网

MYSQL无法生成临时表(海量查询)

MYSQL无法生成临时表(海量查询),mysql,sql,Mysql,Sql,我有4张桌子(1到多张): 不要说任何关于“电子邮件”关系的话。这就是我的开发人员老板多年前构建它的方式 因此,我需要根据客户指定的员工和他们的兴趣筛选客户。 以下是查询: SELECT * FROM ( SELECT customers.id AS 'id', customers.name AS 'first_name',

我有4张桌子(1到多张): 不要说任何关于“电子邮件”关系的话。这就是我的开发人员老板多年前构建它的方式

因此,我需要根据客户指定的员工和他们的兴趣筛选客户。 以下是查询:

SELECT
    *
FROM          
(
    SELECT 
        customers.id                        AS 'id',
        customers.name                      AS 'first_name',
        customers.email,
        employees.id                        AS 'employee_id'
    FROM 
        customers, 
        employees
    WHERE 
        employees.id = 2
        AND 
        customers.employee_assigned = employees.id
) AS myCustomers

LEFT JOIN interests_categories 
    ON interests_categories.customer_email = myCustomers.email
LEFT JOIN interests_products 
    ON interests_categories.customer_email = myCustomers.email
WHERE       
( 
    interests_categories.category_id = 20
    OR 
    interests_categories.category_id = 21
)

GROUP BY myCustomers.email
所以,问题是:

  • 如果员工分配的客户数量较少(如3),则查询 他成功了

  • 如果该员工的指定客户数为中高(超过100个),则查询问题。

我执行ShowProcessList,它被禁用为“生成临时表”

有人知道吗(
谢谢。

检查表上的索引并尝试以下操作:

SELECT 
    c.id AS 'id',
    c.name AS 'first_name',
    c.email,
    e.id AS 'employee_id'
    ic.*,
    ip.*
FROM customers c
JOIN employees e
ON c.employee_assigned = e.id
LEFT JOIN interests_categories ic
    ON ic.customer_email = c.email
LEFT JOIN interests_products ip
    ON ic.customer_email = c.email
WHERE      
( 
    ic.category_id IN (20,21)
    AND e.id = 2
)
GROUP BY myCustomers.email

顺便说一句,一个不那么愚蠢的设计可能如下所示。如果是我,我会从这个开始,并相应地提供具有适当代表性的CREATE和INSERT语句。此外,我很好奇category_id来自何处,因为这可能是进一步优化的一个领域

EMPLOYEES 
------------------------------------------------
employee_id name    
          6 EmpName 1
         12 EmpName 2  

CUSTOMERS 
------------------------------------------------
customer_id name    email            employee_assigned
          1 John    john@doe.com                    12
          2 Donald  donald@duck.com                  6

INTERESTS_CATEGORIES 
------------------------------------------------
customer_id category_id
          1          97
          1          13
          2          56
          2         126
          2          45

INTERESTS_PRODUCTS 
------------------------------------------------
customer_id product_id
          1         78
          1         23
          2         19
          2         56
          2         45

摆脱子查询,只使用联接。此外,使用in而不是where子句中的OR。最后,确保每个表中的电子邮件列以及where或on子句中使用的任何列都有索引。我会尝试。谢谢您的回答。:)最多,在没有聚合函数的查询中包含GROUPBY子句是有误导性的。好吧,我对sql有些了解,但我不是大师。我的工作是php和jquery插件开发,但现在我一个人在这里,没有SQL Master支持。因此,我发现一个超大型查询不起作用。(sry代表我的英语)@Sloan,在emails字段中添加索引是可行的,但可以实现我的旧查询,而不是你的查询。我会努力让你的工作,因为我的不会显示我想要的结果。@Sloarchasher没有,但结果为0。我告诉过你,这个问题比我在这篇文章中提到的要大。我不再尝试使用你的方式了,因为你的方式比我的更符合逻辑。少一些愚蠢的设计?这意味着什么?我是stackoverflow的新手。类别id来自名称关联表。category_id 1意味着,例如,计算机、category 2儿童玩具等。好吧,这会删除“电子邮件关系”,不是吗?所以,别那么傻了。我不能这么做。我说这是一个古老的大型数据库。新客户每1小时同步一次,但之前会在一个繁琐的过程中插入兴趣,因此当插入兴趣时,您只知道电子邮件,而不知道ID。我必须使用我拥有的。我无法进行重大更改,因为这可能会导致重大错误和浪费时间。下次我将提供创建和插入查询。这是我第一篇关于SQL的文章,我不知道这一点。谢谢你的帮助!
EMPLOYEES 
------------------------------------------------
employee_id name    
          6 EmpName 1
         12 EmpName 2  

CUSTOMERS 
------------------------------------------------
customer_id name    email            employee_assigned
          1 John    john@doe.com                    12
          2 Donald  donald@duck.com                  6

INTERESTS_CATEGORIES 
------------------------------------------------
customer_id category_id
          1          97
          1          13
          2          56
          2         126
          2          45

INTERESTS_PRODUCTS 
------------------------------------------------
customer_id product_id
          1         78
          1         23
          2         19
          2         56
          2         45