mysql5.5比5.1快吗_mysql 5.7中的查询比5.1中的查询慢2倍或更多

我们将一个完整的数据库从MySQL 5.1.63迁移到另一个(更好一点)的服务器到MySQL 5.7.22 . 现在大多数查询平均慢了2倍 . 我们没有对MySQL 5.1做太多优化 .

以下是我们更改的配置:

table_open_cache = 4096

tmp_table_size=256M

max_heap_table_size=256M

query_cache_limit = 1000000

query_cache_size = 32000000

innodb_buffer_pool_size = 3200M

innodb_log_buffer_size = 1024M

这是一个具体的例子:

我希望得到所有在课程中被标记为教师的人:

SELECT id, TRIM(CONCAT_WS(" ", name, lastname)) AS name

FROM person

WHERE id IN (SELECT DISTINCT teacher_id FROM course)

ORDER BY name;

运行时间:

mysql 5.1:0.03s . 后续查询:0.00s

mysql 5.7:1.27s . 后续查询:0.80秒

差异是40倍 .

5.1中的说明:

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

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

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

| 1 | PRIMARY | person | ALL | NULL | NULL | NULL | NULL | 16293 | Using where; Using filesort |

| 2 | DEPENDENT SUBQUERY | course | index_subquery | teacher_id | teacher_id | 5 | func | 2677 | Using index; Using where |

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

5.7中的说明:

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

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

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

| 1 | SIMPLE | person | NULL | ALL | PRIMARY | NULL | NULL | NULL | 16491 | 100.00 | Using where |

| 1 | SIMPLE | | NULL | eq_ref | | | 5 | db.person.id | 1 | 100.00 | Using where |

| 2 | MATERIALIZED | course | NULL | index | teacher_id | teacher_id | 5 | NULL | 109741 | 100.00 | Using index |

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

现在,如果我写这样的查询:

select distinct person.id, trim(concat_ws(" ", name, lastname)) as name

from person, course

where person.id = course.teacher_id

order by name;

时代将成为:

mysql 5.1:0.01s

mysql 5.7:0.03s

所以,它有点好,但仍然较慢 .

course.teacher_id 有一个索引 .

安装之间的一个区别是,在5.7的服务器中,数据文件夹位于另一个驱动器上(SSD,性能比5.1服务器中的驱动器好一点) .

有什么建议我应该配置什么来获得5.7到5.1的相同速度?可能还有一些查询需要重写,但我认为配置似乎是必要的 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值