MySQL 8.0 不可见索引使用

梦莱2年前技术文章662

一、具体信息

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,隐藏索引仍然不可见,但是优化器在构建执行计划时将会考虑这些索引

相关文章

Python 实现 Prometheus 自定义指标暴露

Python 实现 Prometheus 自定义指标暴露

虽然 Prometheus 已经拥有可直接使用的 exporter 可供使用,以满足收集不同的监控指标的需要。然而,如果我们需要收集一些自定义指标项,还是需要我们编写程序去暴露相关接口(/metric...

DBMS_SYSTEM跟踪10046

SET_SQL_TRACE_IN_SESSION只能设置level 1的10046事件--启用level 1 Trace EXEC SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_...

HBase导出表和备份表操作

HBase导出表和备份表操作

HBase提供了几种导出数据的方式,包括使用HBase自带的工具和使用HBase的API。本文主要是讲的使用HBase自带的工具进行导出首先我们创建一个表 插入一些数据hbase shelllistc...

Linux解锁线程基本概念和线程控制,步入多线程学习的大门(2)

Linux解锁线程基本概念和线程控制,步入多线程学习的大门(2)

2.4.线程等待:为什么需要线程等待?已经退出的线程,其空间没有被释放,仍然在进程的地址空间内。不然也会造成内存泄露问题!创建新的线程不会复用刚才退出线程的地址空间。主线程退出 == 进程退出 ==...

MySQL运维实战之备份和恢复(8.1)xtrabackup全量备份

xtrabackup是percona开源的mysql物理备份工具。xtrabackup 8.0支持mysql 8.0版本的备份和恢复。xtrabackup 2.4支持mysql 5.7及以下版本的备份...

Hive合并小文件:hive归档(archive)

Hive合并小文件:hive归档(archive)

一、概述       在HDFS中数据和元数据分别由DataNode和NameNode负责,这些元数据每个对象一般占用大约150个字节。大量的小文件相对于大文件会占用大量的NameNode内存。对Na...

发表评论    

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