MySQL 8.0 不可见索引使用

梦莱2年前技术文章704

一、具体信息

1、在提供 SQL 优化意见的时候包括了两个冗余索引的内容,具体内容如下:

查看慢 SQL 的时候发现 database 库 table 表中存在冗余索引,具体冗余索引情况如下:
KEY `key1` (`is_main`,`x`,`xx`,`xxx`),
KEY `key2` (`is_main`),
is_main 列 索引存在一定冗余。

database1 库 table1 表中存在冗余索引,具体冗余索引情况如下:
UNIQUE KEY `uk_key` (`account_sid`),
KEY `key1` (`account_sid`,`xx`)
uk_account_sid 列已具有唯一性,所以目前 KEY `key1` 为重复索引。

2、客户方反馈上一次优化sql时,把table1表的key1索引删除,导致 SQL 报错

3、反馈如下:

对于报错来说:报错原因可以了解到是因为这边使用了 force index,而这个索引被删掉了,导致的报错。

二、补充

该实例是mysql 8.0 的,可以先通过索引不可见(mysql 8.0 的新特性),测试一段时间,对业务没有影响后,再进行索引的删除。如果有影响,可以立刻恢复至可见即可。

use_invisible_indexes 参数:系统变量 optimizer_switch 的 use_invisible_indexes 值控制了优化器构建执行计划时是否使用隐藏索引。如果设置为 off (默认值),优化器将会忽略隐藏索引(与引入该属性之前的行为相同)。如果设置为 on,隐藏索引仍然不可见,但是优化器在构建执行计划时将会考虑这些索引

相关文章

apache Hbase2.x  使用hbck2修复工具

apache Hbase2.x 使用hbck2修复工具

1、背景默认情况下apache hbase 使用hbck2时,无法使用-j 来加载hbck2的jar包,无法进行修复2、解决办法是由于默认情况下只使用自带的hbase hbck修复命令,大部分功能在2...

MySQL优化器特性(一)IN和Exists(semijoin)子查询优化策略

这篇文章中的SQL和执行计划在mysql 8.0.31环境下进行测试。测试的表结构和数据:表结构mysql> show create table tp\G...

数仓主流架构简介之二

数仓主流架构简介之二

一、流批一体数据批流一体是一种云计算架构模式,它结合了批处理和流处理的特点,以实现更高效、灵活和可扩展的数据处理能力。在这种模式下,数据可以同时进行批处理和流处理,以满足不同场景下的需求流批一体:是指...

Linux 文件锁

1、背景Linux 系统定时任务正在执行时,可能会遇到上个周期的任务还没有执行完,这样便会造成相同的任务同一时间有过个任务进程在执行。如果任务有对互斥资源操作时,有可能产生死锁。2、用法参考flock...

数据湖技术之iceberg(十三)Iceberg与Hudi对比

Iceberg和Hudi都是数据湖技术,从社区活跃度上来看,Iceberg有超越Hudi的趋势。他们有以下共同点:l   都是构建于存储格式之上的数据组织方式l &nbs...

MySQL运维实战之ProxySQL(9.10)proxysql监控

MySQL运维实战之ProxySQL(9.10)proxysql监控

stats数据库从stats数据库中可以查到proxysql一些内部组件的状态,如内存使用情况、连接池信息、会话信息、SQL执行状态等。mysql> show tables&...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。