mysql using where; using filesort_mysql order by 造成语句 执行计划中Using filesort,Using temporary相关语句的优化解决...

mysql> explain  select permission.* from t_rbac_permission   permission  inner JOIN  t_rbac_acl  acl  on acl.PERMISSION_ID=permission.ID

where  permission.menu=1 and acl.PRINCIPAL_TYPE=0     order by permission.create_date desc;

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+----------------------------------------------+

| id | select_type | table      | type   | possible_keys      | key     | key_len | ref                         | rows | Extra                                        |

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+----------------------------------------------+

|  1 | SIMPLE      | acl        | ALL    | FKE43AF088F9936F96 | NULL    | NULL    | NULL                        |   94 |  Using where; Using temporary; Using filesort |

|  1 | SIMPLE      | permission | eq_ref | PRIMARY            | PRIMARY | 98      | bs_common.acl.PERMISSION_ID |    1 | Using where                                  |

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+----------------------------------------------+

2 rows in set (0.00 sec)

explain  select permission.* from t_rbac_permission   permission  inner JOIN  t_rbac_acl  acl

on acl.PERMISSION_ID=permission.ID   where   permission.menu=1 and acl.PRINCIPAL_TYPE=0      ;

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+-------------+

| id | select_type | table      | type   | possible_keys      | key     | key_len | ref                         | rows | Extra       |

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+-------------+

|  1 | SIMPLE      | acl        | ALL    | FKE43AF088F9936F96 | NULL    | NULL    | NULL                        |   94 |  Using where |

|  1 | SIMPLE      | permission | eq_ref | PRIMARY            | PRIMARY | 98      | bs_common.acl.PERMISSION_ID |    1 | Using where |

+----+-------------+------------+--------+--------------------+---------+---------+-----------------------------+------+-------------+

????? why    加上   order by permission.create_date desc 的影响???

首先查看相关字段是否加上索引如 order by的字段是否加上索引。加上索引之后单表查询看如何??

1718e7c67e2c133291305e040e2e6a9c.png

77d40f00726798ee05266aa1f61ee1bf.png

63ff4e6aad9046573f753dfd6f1c38ea.png

ok 单表查询还是Using filesort. 查询相关资料进行组合索引试试看

998feae1c31e1c438b2cd7cfce57dad6.png

ok,现在终结了,那么试试连接查询。各种测试结果如下:

dbb5dccc8c9a5ef6a9243f354702ee51.png

例如:

46dfc310daa09e8cc9373437cd6a1a4b.png

增加索引后

5455a9fd8b4082c589e5b82a35090c60.png

效果如下

b0554c3b554926d5290fd2fba77944ae.png


版权声明:本文为weixin_42511157原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。