暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 ncida 2019-11-21
1814

通过在您的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部署用一个简单的用户界面来启动它。

image.png

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

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

最后修改时间:2019-11-21 14:02:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论