我有两张桌子:
然后我继续加入两个表:
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
答案 0 :(得分: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);