【问题标题】:MYSQL : LEFT JOIN run slowlyMYSQL:LEFT JOIN 运行缓慢
【发布时间】:2012-10-25 22:56:44
【问题描述】:

我有两张桌子:

table 1

table 2

然后我确实离开了两个表:

SELECT DATE(`Inspection_datetime`) AS Date, `Line`,`Model`, `Lot_no`, 
       COUNT(A.`Serial_number`) AS Qty,B.`name`
FROM `inspection_report` AS A
LEFT JOIN `Employee` AS B
ON A.`NIK` LIKE B.NIK
GROUP BY Date , A.Model ,A.Lot_no,A.Line,B.`name`
ORDER BY Date DESC

这个查询使我的 Jquery DataTable 插件运行非常缓慢,即使数据没有显示。奇怪的地方是B.name这个字段,如果我在查询中提到它,数据不会出现,但如果我删除它,数据就会出现(我的意思是不做LEFT JOIN)。

我的查询是否不够好?这是我的EXPLAIN

TABLE 1

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  inspection_report   ALL NULL    NULL    NULL    NULL    334518  

TABLE 2
    id  select_type table   type    possible_keys   key key_len ref rows    Extra
    1   SIMPLE  Employee    ALL NULL    NULL    NULL    NULL    100 

QUERY
id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  B   ALL NULL    NULL    NULL    NULL    100 Using temporary; Using filesort
1   SIMPLE  A   ALL NULL    NULL    NULL    NULL    334520  Using where; Using join buffer

【问题讨论】:

    标签: mysql indexing left-join explain


    【解决方案1】:

    您加入 LIKE 子句而不是平等的任何特殊原因?

    SELECT DATE(`Inspection_datetime`) AS Date, `Line`,`Model`, `Lot_no`, 
           COUNT(A.`Serial_number`) AS Qty,B.`name`
    FROM `inspection_report` AS A
    LEFT JOIN `Employee` AS B
    ON A.`NIK` = B.NIK
    GROUP BY Date , A.Model ,A.Lot_no,A.Line,B.`name`
    ORDER BY Date DESC
    

    应该会产生更好的结果。

    此外,向 A.NIK 添加索引应该会极大地帮助连接操作。

    CREATE INDEX inspection_report_nik ON inspection_report (NIK);
    

    【讨论】:

    • 我已经尝试过您的答案,然后在我的 phpmyadmin 中尝试,然后它会运行得更快。但是,它仍然没有出现在我的数据表中(在我的萤火虫没有错误)。
    • 那么您的问题可能与插件有关。我们需要查看您拥有的 javascript 和任何服务器端代码
    猜你喜欢
    • 2016-08-08
    • 2012-12-23
    • 1970-01-01
    • 2010-12-18
    • 2020-05-12
    • 2021-11-25
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多