MySQL隐形索引简介
不可见索引允许您将索引标记为查询优化器不可用。MySQL维护不可见索引,并在与索引关联的列中的数据发生更改时使其保持最新。
默认情况下,索引是可见的。要使它们不可见,您必须在创建时或使用ALTER TABLE命令显式声明其可见性。MySQL为我们提供了维护索引可见性的关键字VISIBLE和INVISIBLE关键字。
要创建不可见索引,请使用以下语句:
|
1
2
|
CREATE INDEX index_name
ON table_name( c1, c2, ...) INVISIBLE;
|
在这个语法中:
- 首先,在
CREATE INDEX子句后指定索引的名称。 - 其次,列出要添加到索引的表名和列列表。该
INVISIBLE关键字表明您正在创建的索引是不可见的。
例如,以下语句在示例数据库extension中的employees表的列上创建索引,并将其标记为不可见索引:
|
1
2
|
CREATE INDEX extension
ON employees(extension) INVISIBLE;
|
要更改现有索引的可见性,请使用以下语句:
|
1
2
|
ALTER TABLE table_name
ALTER INDEX index_name [VISIBLE | INVISIBLE];
|
例如,要使extension索引可见,请使用以下语句:
|
1
2
|
ALTER TABLE employees
ALTER INDEX extension VISIBLE;
|
您可以通过查询数据库中的statistics表来查找索引及其可见性information_schema:
|
1
2
3
4
5
6
7
8
|
SELECT
index_name,
is_visible
FROM
information_schema.statistics
WHERE
table_schema = 'classicmodels'
AND table_name = 'employees';
|
这是输出:

此外,您可以使用该SHOW INDEXES命令显示表的所有索引:
|
1
|
SHOW INDEXES FROM employees;
|
如前所述,查询优化器不使用不可见索引,那么为什么首先使用不可见索引?实际上,隐形索引有许多应用程序。例如,您可以使索引不可见,以查看它是否对性能产生影响,并将索引再次标记为可见。
MySQL隐形索引和主键
主键列上的索引不能是不可见的。如果您尝试这样做,MySQL将发出错误。
此外,隐式主键索引也不可见。当您UNIQUE在NOT NULL没有主键的表的列上定义索引时,MySQL会隐式地理解该列是主键列,并且不允许您使索引不可见。
请考虑以下示例。
首先,创建一个新表与UNIQUE上一个索引NOT NULL列:
|
1
2
3
4
5
6
7
8
|
CREATE TABLE discounts (
discount_id INT NOT NULL,
name VARCHAR(50) NOT NULL,
valid_from DATE NOT NULL,
valid_to DATE NOT NULL,
amount DEC(5 , 2 ) NOT NULL DEFAULT 0,
UNIQUE discount_id(discount_id)
);
|
其次,尝试使discount_id 索引不可见:
|
1
2
|
ALTER TABLE discounts
ALTER INDEX discount_id INVISIBLE;
|
MySQL发出以下错误消息:
|
1
|
Error Code: 3522. A primary key index cannot be invisible
|
MySQL隐形索引系统变量
为了控制查询优化器使用的可见索引,MySQL使用系统变量的use_invisible_indexes标志optimizer_switch。默认情况下,use_invisible_indexes关闭:
|
1
|
SELECT @@optimizer_switch;
|
在本教程中,您了解了MySQL隐形索引,如何创建
MySQL隐形索引简介的更多相关文章
- MySQL数据库索引简介
一.索引的含义和特点 索引是一个单独的.存储在磁盘上的数据库结构,他们包含着对数据表里所有记录的引用指针.使用索引用于快速找出某个或多个列中有一特点值的行,所用MySQL列类型都可以被索引,对 ...
- mysql之索引简介
索引分类 mysql在存储数据时,是按着主键的顺序存储的.主键索引是物理索引,其他索引都是逻辑索引. 普通索引 普通索引是最基本的索引,没有任何限制的索引,普通索引列的数据可以重复.其唯一的任务就是加 ...
- 【Mysql】索引简介
本文口味:番茄炒蛋,预计阅读:10分钟. 博客又停更了两个月,在这期间,对人生和世界多了许多思考.在人生的不同阶段,会对生活和世界有着不一样的认知,而认知的改变也会直接反应在行为模式之中. 对于生活的 ...
- 【mysql】- 索引简介篇
简介 我们都知道mysql使用存储引擎的是InnoDB,InnoDB使用的索引的对应的数据结构是B+树 结构图: 如上图所示,我们实际用户记录是存放在B+树的最底层的节点上,这些节点也被称为叶子节点或 ...
- MySQL中的索引简介
MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 一. 索引的优点 为什么要创建索引?这是因为,创建索引可以大大提高系统的查询性能. 第一.通过创建唯一性索引,可以保 ...
- 第 3 章 MySQL 存储引擎简介
第 3 章 MySQL 存储引擎简介 前言 3.1 MySQL 存储引擎概述 MyISAM 存储引擎是 MySQL 默认的存储引擎,也是目前 MySQL 使用最为广泛的存储引擎之一.他的前身就是我们在 ...
- MySQL(3)-索引
一.索引类型 在MySQL中,存储引擎使用索引,首先在索引中找到对应值,然后根据匹配的索引记录中找到对应的行. 无论是多么复杂的ORM工具,在精妙和复杂的索引面前都是"浮云".这里 ...
- 为什么MySQL数据库索引选择使用B+树?
在进一步分析为什么MySQL数据库索引选择使用B+树之前,我相信很多小伙伴对数据结构中的树还是有些许模糊的,因此我们由浅入深一步步探讨树的演进过程,在一步步引出B树以及为什么MySQL数据库索引选择使 ...
- MySQL慢日志简介及Anemometer工具介绍
作者:王航威 - fordba.com 来源:http://fordba.com/box-anemometer-visual-mysql-slow.html,叶师傅对原文内容略有调整 备注:王航威是知 ...
随机推荐
- 多线程编程(六)-Executor与ThreadPoolExecutor的使用
使用Executors工厂类创建线程池 1.使用newCachedThreadPool()方法创建无界线程池 newCachedThreadPool()方法创建的是无界线程池,可以进行线程自动回收,此 ...
- 译自如何将Spring Cloud应用程序从Spring Boot 1.2迁移到1.3
前言 笔者第三个Spring Cloud(版本为Spring Boot 1.2)类项目升级最新版本时遇到不少问题,本文内容是作者翻译Spring Cloud官网一位国外友人文章产生. 原文地址: Mi ...
- SpringMVC之表单校验
SpringMVC已经实现了对Java校验API(JSR-303)的支持,通过使用该API可以实现对数据的校验.要使用SpringMVC的Java校验API并不需要任何配置,只要引入其实现即可.本文使 ...
- 如何优雅的控制goroutine的数量
1,为什么要控制goroutine的数量? goroutine固然好,但是数量太多了,往往会带来很多麻烦,比如耗尽系统资源导致程序崩溃,或者CPU使用率过高导致系统忙不过来.比如: ; i < ...
- Docker基础教程(命令详解)
# docker --help Usage: docker [OPTIONS] COMMAND [arg...] docker daemon [ --help | ... ] docker [ -h ...
- 并发编程之 CopyOnWriteArrayList 源码剖析
前言 ArrayList 是一个不安全的容器,在多线程调用 add 方法的时候会出现 ArrayIndexOutOfBoundsException 异常,而 Vector 虽然安全,但由于其 add ...
- ASCX呼叫ASPX.CS的方法
为了安全设计,一般情况之下,改用为接口(interface). 在网页中实现这个接口: 用户控件: 当然,把用户控件ascx拉至网页之后,在用户控件的linkbutton的click事件,就可以呼叫至 ...
- SQL Server T—SQL 函数
一 聚合函数(统计函数)!!!!! 计算个数 count( ) select count(*) from 表名 求和 sum( ) select sum(列名) from 表名 求平均数 ...
- [PHP] 排序和查找算法
知乎:冒泡排序(bubble sort)的原理是什么? 潘屹峰: 冒泡排序的原理可以顾名思义:把每个数据看成一个气泡,按初始顺序自底向上依次对两两气泡进行比较,对上重下轻的气泡交换顺序(这里用气泡轻. ...
- 【Spring】2、BeanFactory 和FactoryBean的区别
转自:http://chenzehe.iteye.com/blog/1481476 1. BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的 ...