阿里三面:MySQL回表的性能伤害有多大?

阿里三面:MySQL回表的性能伤害有多大?,第1张

无论单列索引 or 联合索引,一个索引就对应一个独立的B+索引树,索引树节点仅包含:

即使根据索引树按条件找到所需数据,也仅是索引里的几个字段的值和主键值,万一你搞个select *,那就还得其他字段,就需回表,根据主键到聚簇索引里找,聚簇索引的叶节点是数据页,找到数据页才能把一行数据所有字段值读出来。

所以类似

得从联合索引的索引树里按序取出所有数据,接着对每条数据都走一个主键的聚簇索引查找,性能不高。

有时MySQL执行引擎可能认为,你要是类似

相当于得把联合索引和聚簇索引,两个索引的所有数据都扫描一遍,那还不如不走联合索引,直接全表扫描得了,这样就只需扫描一个主键索引。

但若形如:

那执行引擎就知道你先扫描联合索引的索引树,拿到10条数据,接着对10条数据在聚簇索引里查找10次即可,那就还是会走联合索引。

覆盖索引不是一种索引,只是一种基于索引查询的方式,即针对类似

仅需联合索引里的几个字段的值,那就只需扫描联合索引的索引树,无需回表找其它字段,这种查询方式就是覆盖索引。

所以当你使用联合索引时,注意是否可能会导致大量回表到聚簇索引,若回表聚簇索引的次数太多,可能就直接给你做成全表扫描而不走联合索引了。

尽可能还是在SQL里指定你仅需要的字段,而不要暴力select *,最好直接走覆盖索引。

即使无可避免地要回表,你也尽可能用limit、 where限定一下回表的次数,就从联合索引里筛选少数数据,再回表,这样性能好一点。

小鸟云服务器niaoyun实例创建好之后,您可以使用以下任意一种方式登录服务器:

远程桌面连接(MicrosoftTerminalServicesClient,MSTSC):采用这种方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。

管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。

使用远程桌面连接(MSTSC)登录实例

打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。

在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。

输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。

用户在购买完RDS后,接下来就可以开始往RDS迁入数据了。在RDS刚刚对外提供服务的时候,用户只能通过将自己的数据库dump成为sql文件,然后再将sql文件source到RDS中去:数据迁移至RDS-MySQL之使用MySQLdump工具,数据迁移至RDS-SQLserver之利用SQL Server客户端工具,这两种方法是最简单的方法,但是局限性也非常的多:

.用户的数据库太大了,逻辑sql导入的方式速度太慢了,严重影响停机时间;

.在导入的过程中报错很多,或者导入一半的过程中中断了,需要重新来过;

.在迁入RDS过程中,希望我的数据库还能能正常提供服务;

大量的用户入云全部堵在迁移数据上面,用户与RDS的缘分就差么这临门一脚。工欲善必先利其器,为了更好的帮助用户入云,RDS对现有的用户入云迁移方式进行改进,帮助用户快速稳定迁移入云,分别为用户提供了mysql和sqlserver两套改良迁移工具:

.mysql迁移工具支持在线迁移,用户可以不中断业务的情况下把数据迁移到RDS中来

.sqlserver的迁移工具采用物理备份的方法,将用户的物理备份上传到FTP中后还原到RDS,提升迁移的速度

这两套工具目前都已经集成到了RDS的控制台中,可以参考:数据迁移至RDS-MySQL之使用阿里云控制台和 数据迁移至RDS-SQLserveru阿里云控制台.

很多用户在控制台上看到的只是一个黑盒子,在工单中多次咨询迁移的原理,在这里大致讲一下这两个工具的迁移实现:

Mysql在线迁移的原理:

第一步:预检查,主要是验证用户网络的通畅性,账号和环境的检查;

第二步:全量备份,该步骤会把用户的数据全量的dump出一份出来,然后还原到RDS;

第三步:增量迁移,该步骤会解析用户全量期间以及后续产生的binlog应用到RDS;

第四步:切换,当RDS的数据完全追上用户的数据库后,用户就可以开始进行切换了;

Mysql的在线迁移工具目前还有一些限制,比如:

mysql 5.0只支持全量迁移,不支持增量迁移;

不支持mysql5.6的迁移;不支持存储过程,触发器的迁移;

迁移过程中如果有ddl发生则会导致增量迁移失败;

SQLSERVER工具迁移的原理:

第一步:备份用户对本地数据库进行物理备份

第二步:备份上传至RDS提供的ftp服务器上(ftp地址支持私网和公网上传)

第三步:RDS扫描校验用户上传备份文件通过后,恢复至用户RDS

第四步:用户切换应用至RDS

由于sqlserver目前还没有开放日志接口,所以RDS目前还不能支持在线迁移;

RDS目前不支持master库的导入。

希望这篇文章对你使用RDS有帮助。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8507834.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-17
下一篇 2023-04-17

发表评论

登录后才能评论

评论列表(0条)

保存