大家好,我是鸭鸭!
全球知名代码托管平台 GitLab 发布通告,宣布不再为位于中国大陆、香港及澳门地区的用户提供访问服务,并且“贴心”建议,可以访问极狐 GitLab。
极狐 GitLab 是一家中外合资公司,宣称获得了 GitLab 独家、且永久不可撤销的 IP 授权,提供的服务相当于是本土化收费特供版的 GitLab。
给大家画个重点,收费。
极狐 GitLab 目前所有 SaaS 服务都需要付费使用。私有部署服务仅有一个功能非常基础的免费版本。而 Gitlab 作为全球数一数二的开源社区,个人和小团队用户可以选择免费的 GitLab CE,在自己的服务器上使用,并自行搭建私有仓库。
现在用户访问 GitLab ,会跳转提示:
而且根据 GitLab 官方通知,现有中国区用户需在 60 天内完成账户迁移,等过渡期结束后,未完成迁移的账户可能会被 GitLab 删除。
付费的因素外,极狐 GitLab 最近在国内争议也不少。先有员工实名举报公司高管为美国间谍,虽然极狐自己发公告辟谣,但官方还没有一个正面答复。不久前又有某乎爆料称极狐 GitLab 给国内 GitLab CE 用户发邮件告知函。
据说这份告知函只发了很小一部分,不知道有没有小伙伴收到邮件?
60 天迁移期不算长,大家是准备迁移还是寻找替代品呢?
Gitea、Gogs、OneDev、GitBucket、Gitblit……还是其他产品?欢迎大家来评论区讨论。
……
吃瓜告一段落,鸭鸭为大家准备好了今天的面试题,快来面试鸭一起刷题吧!
MySQL 中的回表是什么?
回答重点
“回表” 是指在使用二级索引(非聚簇索引)作为条件进行查询时,由于二级索引中只存储了索引字段的值和对应的主键值,无法得到其它数据。如果要查询数据行中的其它数据,需要根据主键去聚簇索引查找实际的数据行,这个过程被称为回表。
扩展知识
进一步理解回表
举个例子:select * from user where age = 20;
(user 包含 name、age、id 三个字段。假设 MySQL 优化器确定使用 age 索引)
1)根据二级索引(age)找到 age = 20 的 主键键值:
2)由于查询条件是 select * ,需要 name、age、id 三个字段,而 age 索引内没有 name 字段,因此还需要再根据主键去查找整行的数据:
最终得到 2、小鱼、20 三个数据。
回表其实不仅仅只是多查一次,还会带来随机 I/O。
因为通过 id 去主键索引查询的时候,id 肯定是不连续的(例如 age 为 20 的人很多,age 索引中年龄是有序的,但是 id 无序,且是不连续的),所以去主键索引频繁查询会造成大量随机 I/O ,我们都知道顺序 I/O 查询快,而随机 I/O 慢,所以频繁回表效率很低。
因此,不要因为图方便,在代码里都用 select * ,从而引发不必要的回表操作。