MySQL 80 的隐藏索引 索引管理的利器 还是性:能!陷阱
中国社会科学网  发布时间:2025-07-23 23:10:20   

0前言MySQL8.0开始支持隐藏索引,不可见索引。它允许快速启用/禁用MySQLOptimizer使用的索引。

隐藏索引不会被优化器使用,但仍需维护

1应用场景软删除灰度发布,测试新索引:在不影响现有查询性能的情况下,测试新创建的索引是否有效维护索引:在更新或重建索引时,可以先将其设置为不可见,避免影响在线查询临时禁用无用索引:如果某个索引不再被频繁使用,可以将其设置为不可见,减少不必要的开销2啥用?若想删除一个索引,又想事先知道效果。可使它对优化程序不可见。这是一个快速的元数据更改,使索引不可见。一旦确定没有性能下降,就可真正去删除索引。

关键:隐藏索引不能供优化器使用,但它仍存在,并通过写入操作保持最新。即便尝试“FORCEINDEX”,优化器也不会用它,虽然我认为我们应该能在某种程度强制它。可能会有这样情况:

可创建一个新的隐形索引,但若想测试它,须使它可见。即所有对应用程序有即时影响的查询都将能用它。若目的只是想测试它,我不认为这是最好方法,不是所有人的服务器都有相同的数据大小和真实数据。强制隐藏索引这时可能会很有用。

你有许多索引,但不确定哪个未使用。可将一个索引更改为不可见,以查看是否存在任何性能下降。若是,你可立即更改。

可能有个特殊情况:只有一个查询可用该索引。此时,隐藏索引可能是很好解决方案。

3创建有两个选项:

3.1创建一个具有隐藏索引的表CREATETABLEt1(iINT,jINT,kINT,INDEXi_idx(i)INVISIBLE)ENGINE=InnoDB;CREATEINDEXj_idxONt1(j)INVISIBLE;3.2altertable并将索引更改为隐藏ALTERTABLEt1ADDINDEXk_idx(k)INVISIBLE;4使用如果我们现在要删除索引,我们可以将其更改为隐藏。但是使用“FORCE/USEINDEX”的查询怎么样?他们是否会抛出一个错误?如果强制不存在的索引,你会收到错误。你不会看到隐藏索引的错误。优化器不会使用它,但知道它存在。

大型表上,这可能导致严重性能问题。即使MySQL在查询执行期间不抛任何错误,它也应在错误日志中记录一个警告。

  坚持因地制宜、科学抗旱,河库灌区及时开闸放水,增加流量,采取疏通渠道、维修涵闸等措施,做到远送多浇、有水可浇;引黄灌区根据抗旱需水情况,及时开闸放水,争取多引黄河水;平原灌区发挥机电井作用,采取有效措施保障机井通电,并组织投入各类排灌机械179.4万台,努力增加抗旱播种面积。丘陵岗区利用坑、塘、堰、坝等小型水利工程组织抗旱播种。夏播以来,全省累计抗旱浇水7977.3万亩次,播种进度与常年相当。

延伸阅读:与 MySQL 80 的隐藏索引 索引管理的利器 还是性:能!陷阱 的相关文章
常州队全员业余球员硬刚苏超
张杰女儿睡前信息
孟子义李昀锐合作的第部剧
内蒙古通报那尔那茜有关核查情况
马嘉祺云与海
婚检查出重大疾病医院仅告知本人
女子想开蜜雪冰城结果加盟奶爸王子
年净网护网专项工作部署会召开
武汉警方通报一起持刀伤人案
电诈骗子潜入医院劫持电话

(原标题:MySQL 8.0 的隐藏索引: 索引管理的利器, 还是性能陷阱?)
来源:中国社会科学网  作者:沈文彦  编辑:丛明轩
返回
临沂车夫物流有限公司