我对Mysql中的Visible INDEX和Invisible INDEX感到困惑,哪个更好?
我有一个包含大约1M行记录的数据库表。之前的开发团队没有在表列上添加索引。现在我们需要为一些列添加索引以加速查询。 在为列添加索引时,我对可见索引和不可见索引感到困惑。
请问有没有人可以解释一下哪个是最佳选择。我尝试从在线教程中学习,但是我弄不清楚。
我对Mysql中的Visible INDEX和Invisible INDEX感到困惑,哪个更好?
我有一个包含大约1M行记录的数据库表。之前的开发团队没有在表列上添加索引。现在我们需要为一些列添加索引以加速查询。 在为列添加索引时,我对可见索引和不可见索引感到困惑。
请问有没有人可以解释一下哪个是最佳选择。我尝试从在线教程中学习,但是我弄不清楚。
https://dev.mysql.com/doc/refman/8.0/en/invisible-indexes.html说:
MySQL支持不被优化器使用的隐藏索引。
隐藏索引使得能够测试删除索引对查询性能的影响,而不会造成破坏性的更改,如果该索引是必需的,则必须撤消更改。 对于大型表而言,删除和重新添加索引可能很昂贵,而使其隐藏和可见则是快速的原地操作。
隐藏索引是存在的索引,并且在运行INSERT / UPDATE / DELETE语句时仍与数据保持同步。但是,优化器会将其视为不存在。
查询中的索引提示可以抑制任何索引的使用,这是我们在MySQL 5.x期间进行测试的方式。但是,这需要找到所有将使用该索引的SQL查询,并更改应用程序代码。 如果您的查询由ORM代码层生成,则特别不方便。
简单来说:
可见索引是正在工作或激活的索引。
不可见索引是被标记为已删除的索引,已经被移除了。