MySQL选择-添加第二个联接后性能下降

时间:2018-09-28 11:03:10

标签: mysql sql

在执行SELECT之前,直到我添加第二个LEFT JOIN为止,它都工作正常。现在显示表的时间为18秒。

当我省略group_concat和GROUP BY时,它对于两个JOINS都可以正常工作。创建视图没有帮助。 在table1和table2之间是一对多的关系,因此,我需要使用group_concat在每一行中都有唯一的TICKETNO。

是否可以编写此查询以更快地执行它?谢谢。

SELECT table1.TICKETNO,
table2.STARTTIMESTAMP,
group_concat(table2.ACTION),
table1.COMPLETION,
table3.MEASURE
FROM table1
LEFT JOIN table2 ON (table1.TICKETNO=table2.TICKETNO)
LEFT JOIN table3 ON (table1.ERRORCODE=table3.ERRCODE)
GROUP BY table1.TICKETNO

索引:

+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table          | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table1         |          0 | PRIMARY  |            1 | TICKETNO    | A         |       21894 |     NULL | NULL   |      | BTREE      |         |               |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+



+-------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name | Seq_in_index | Column_name    | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table2            |          0 | PRIMARY  |            1 | TICKETNO       | A         |       76110 |     NULL | NULL   |      | BTREE      |         |               |
| table2            |          0 | PRIMARY  |            2 | STARTTIMESTAMP | A         |       76110 |     NULL | NULL   |      | BTREE      |         |               |
+-------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+


+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table          | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| table3         |          0 | PRIMARY  |            1 | SPRAS       | A         |           6 |     NULL | NULL   |      | BTREE      |         |               |
| table3         |          0 | PRIMARY  |            2 | ERRCODE     | A         |        1138 |     NULL | NULL   |      | BTREE      |         |               |
+----------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

这是我的查询的解释:

+------+-------------+-------------------+------+---------------+---------+---------+------------------------------------+-------+-------------------------------------------------+
| id   | select_type | table             | type | possible_keys | key     | key_len | ref                                | rows  | Extra                                           |
+------+-------------+-------------------+------+---------------+---------+---------+------------------------------------+-------+-------------------------------------------------+
|    1 | SIMPLE      | table1            | ALL  | NULL          | NULL    | NULL    | NULL                               | 21894 | Using temporary; Using filesort                 |
|    1 | SIMPLE      | table2            | ref  | PRIMARY       | PRIMARY | 8       | mydb.table1.TICKETNO               |     1 |                                                 |
|    1 | SIMPLE      | table3            | ALL  | NULL          | NULL    | NULL    | NULL                               |  1138 | Using where; Using join buffer (flat, BNL join) |
+------+-------------+-------------------+------+---------------+---------+---------+------------------------------------+-------+-------------------------------------------------+

1 个答案:

答案 0 :(得分:1)

尽管速度很慢,并且您没有提供其他详细信息,但我只想问一下您是否有可以更好地帮助您的索引,包括:

table     index
table1    (ticketno, completion)
table2    (ticketno, action)
table3    (errcode, measure)