mysql在表上创建索引_在MySQL表上创建索引的最佳实践案例

通过在您的MySQL表上设置适当的索引,您可以大大提高挑选查询速度。但是,您知道向表中添加索引本身是一项复杂的操作,并且可能需要很长时间才能完成,这取决于表的大小吗?在此期间,您还可能会遇到查询性能下降的情况,因为您的系统资源也忙于索引创建工作。在这篇博客文章中,我们讨论了一种优化MySQL索引创建过程的方法,使您的常规工作负载不受影响。

MySQL滚动索引创建

我们称这种方法为“滚动索引创建”——如果您有一个MySQL主从副本集,您可以以滚动方式一次创建一个节点的索引。您应该只在从属节点上创建索引,这样不会影响主节点的性能。当从服务器上的索引创建完成后,我们将当前主服务器降级,并将其中一个最新的从服务器提升为新的主服务器。此时,索引构建继续在原始主节点(现在是从节点)上进行。由于故障转移,您将在短时间内(几十秒)失去与数据库的连接,但这可以通过应用程序级重试来克服。

滚动索引创建的性能优势

我们做了一个小实验来了解滚动索引创建的性能优势。

测试使用了一个使用Sysbench它有三张各有5000万行的表。我们在MySQL主服务器上生成了负载,30个客户端运行了10分钟的平衡工作负载(50%的读取和50%的写入),同时在两种情况下,在其中一个表上构建了一个简单的辅助索引:

1.直接在母版上创建索引

2.在从属服务器上创建索引

MySQL测试床配置

MySQL实例类型

EC2实例m4 大型8GB内存

部署类型

具有半同步复制的2节点主从集

MySQL版本

5.7.25

绩效结果

方案

工作负载吞吐量(每秒查询数)

第95百分位延迟

在母版上创建索引

453.63

670毫秒

滚动索引创建

790.03

390毫秒

外卖食品

通过直接在MySQL主机上运行索引创建,我们只能体验到通过滚动操作在MySQL从机上运行索引创建所获得的吞吐量的60%。当在主服务器上创建索引时,查询的第95百分位延迟也高1.8倍。

自动创建滚动索引

ScaleGrid为您的自动创建滚动索引MySQL部署用一个简单的用户界面来启动它。

e4c264ea7a069edf2085c64b95eabd0c.png

在上面的用户界面中,您可以选择您的数据库和表名,并“添加索引”作为“更改表”操作。然后,指定列名和索引名,将为您生成并显示一个更改表命令。单击“创建”后,索引创建将以滚动方式一次创建一个节点。

此外,ScaleGrid还支持其他简单的更改表操作,如以滚动方式向表中添加新列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值