如何避免在MySql中具有相同输出的SubQuery

时间:2018-10-11 01:17:21

标签: php mysql sql

美好的一天! 我已经看过其他有关避免子查询/使用JOIN语句的文章,但仍然无法弄清楚为什么我的查询执行9个结果数据的速度如此之慢。但是当结果数据超过数千时,查询仅执行0.7k ms。

我的问题是,如何加快此查询的执行速度,删除/添加哪些内容,还是需要重新构造查询?怎么样?

这是我的查询

docker ps

这是屏幕截图 EXPLAIN result

已更新EXPLAIN result的SS

我已经设置了INDEX: 更改表SELECT a.ts, b.bc, b.rem, c.dept FROM table1 a INNER JOIN (select doc, max(ID) from table1 Group By doc) d ON d.doc=a.doc AND d.ID=a.ID INNER JOIN table2 c ON c.u_id=a.u_id INNER JOIN table3 b ON b.id=a.doc WHERE c.depart = 'deparment' AND b.end = 0 添加索引max_id(table3endid); 更改表bc添加索引max_id(table1IDdocu_idts); 更改表rem添加索引m_id(table1doc); 更改表ID添加索引user_max(table2dept);

1 个答案:

答案 0 :(得分:0)

尝试相关子查询:

SELECT a.ts, b.bc, b.rem, c.dept
FROM table1 a INNER JOIN
     table2 c
     ON c.u_id = a.u_id INNER JOIN
     table3 b
     ON b.id  =a.doc
WHERE c.depart = 'deparment' AND b.end = 0 AND
      d.id = (SELECT MAX(t1.id) FROM table1 t1 WHERE t1.doc = a.doc);

对于相关子查询,您需要在table1(doc, id)上建立索引。