Mysql索引基本概念及案例总结

键(Key)与索引(Index)关键字的区别

索引是键的列表,当我们定义一个key(外键除外,一般是PRIMARY KEY或者KEY形式)时就会产生对应的索引。一般情况下KEY和INDEX关键字可以互换。

唯一索引的说明

唯一索引是只允许索引中每个值只能对应一行的索引。这里唯一分两层含义,在用户层对应唯一约束,即不能将重复的值插入定义为唯一的字段里,而对于数据库而言唯一性对应的是唯一索引检查字段的不重复性。

特别的:对于字段允许为NULL的唯一索引,NULL可以多次插入进去,而不被认为是重复的数据。

主键Primary Key的说明

唯一表的主键是定义行唯一性的索引,对于主键而言,NULL值是不被允许的,即它不能插入到定义为主键的字段里。实际上表里任意定义为Unique索引的列就可以作为表的主键,但一般选择其中不经常变的字段。

在InnoDB里主键有特殊的用途,在数据库复制时通过主键可以检测到每一行变化时的时间戳。在组复制(GROUP Replication)时一般明确要求表有主键或者有唯一索引。

sql_require_primary_key选项是强制表有主键,默认时没有这个要求(即表必须得有主键)。

次(辅助)索引Secondary Indexes的说明

辅助索引是相对于主键而言的,除主键之外的唯一索引或者普通索引都叫做辅助索引。

聚集索引

在InnoDB里将行数据存储于B树索引(B-tree)的叶子页内的索引叫做聚集索引。因为索引的值聚集在一起,所有有了聚集索引这个名字。主键就是用于做聚集索引的。特别的,如果没有给表设定主键,那么InnoD引擎会找唯一不为NULL值的索引作为“主键”。如果还是找不到,那么InnoD引擎会加一个隐藏的6字节自增整数,该值相对于InnoD引擎里的所有表都是唯一的。

覆盖索引

覆盖索引又称之为索引的命中,即可我们给出的查询里所有的字段都被索引覆盖(命中)。比如一个查询:

SELECT deptno,deptname
FROM dept
-- 这里的两个字段deptno和deptname都能通过某个索引查询的到,则成为索引命中。

这里的两个字段deptno和deptname都能通过某个索引查询的到,则成为索引命中。

索引的限制

  1. 在数据库页大小是16k时,B-tree索引的最大宽度(索引字段里定义的长度)为3072字节(DYNAMIC、COMPRESSED)、767字节(REDUNDANT 、 COMPACT),其中DYNAMIC、COMPRESSED、REDUNDANT 、 COMPACT是InnoDB里的4中行格式。同理如果当前数据库页为8k则DYNAMIC、COMPRESSED行格式下索引最大为1536字节。
  2. 当指定了索引字段的长度时,Blob或者Text只能在非全文索引的索引中使用。
  3. 一个表只能对1017个字段设置功能键(唯一、外键等)。
  4. 一个表只能有64个辅助索引。
  5. 一个表设置复合索引或功能键时最多只能包含16个字段。

关于行格式:表的行格式决定了记录行是物理存储的形式,同时它也影响到查询以及数据操作时的效率。如果更多的行填充到磁盘页里,那么查询或者索引查找时将更快,数据缓存池里将使用更少缓存,同时也会有更少的I/O读写操作。

常见的行格式有:REDUNDANT, COMPACT, DYNAMIC, and COMPRESSED.

行格式

压缩存储特点

增强的变长列存储

大索引键前缀支持

压力支持

支持的表空间类型

REDUNDANT

system, file-per-table, general

COMPACT

system, file-per-table, general

DYNAMIC

system, file-per-table, general

COMPRESSED

file-per-table, general

详细可见:MySQL :: MySQL 8.0 Reference Manual :: 15.10 InnoDB Row Formats

https://dev.mysql.com/doc/refman/8.0/en/create-index.htmlhttps://dev.mysql.com/doc/refman/8.0/en/create-index.html

代码验证

创建表时指定索引

CREATE TABLE people (
id int unsigned NOT NULL,
name varchar(50),
birthdate date NOT NULL,
location point NOT NULL SRID 4326,
description text,
PRIMARY KEY (id),
INDEX (name),
SPATIAL INDEX (location),
FULLTEXT INDEX (description)
);

注:

  1. 创建表时指定了唯一索引。
  2. 指定了Name字段的辅助索引。
  3. 指定以Location字段对应的坐标索引。
  4. 指定了文本(text)类型的Description字段对应的全文索引。

Mysql索引基本概念及案例总结(含索引的使用注意事项)相关推荐

  1. Mysql数据类型之字符串的案例介绍(含latin1下varchar的最大长度是65532还是65533)

    认识Mysql数据类型里的字符串 数据类型概述 Mysql里的数据类型主要有数值型(整形.浮点型).时间类型.字符串类型.JSON类型.坐标类型.混合类型(整数或字符串).本文主要介绍字符串和二进制类 ...

  2. mysql索引优化实际例子_MySQL索引优化的实际案例分析

    Order by desc/asc limit M是我在mysql sql优化中经常遇到的一种场景,其优化原理也非常的简单,就是利用索引的有序性,优化器沿着索引的顺序扫描,在扫描到符合条件的M行数据后 ...

  3. MySQL聚集索引详解_MySQL innodb 聚集索引的概念与使用教程

    聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同.一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个. 在MySQL中,InnoDB引擎表是( ...

  4. MYSQL——索引设计原则与案例分析

    摘要 B+ 树为了维护索引有序性,在插入新值的时候需要做必要的维护.假如表中 R1~R5 的 (ID,k) 值分别为 (100,1).(200,2).(300,3).(500,5) 和 (600,6) ...

  5. 技术分享 | MySQL 索引长度限制的案例

    作者:刘晨 网名 bisal ,具有十年以上的应用运维工作经验,目前主要从事数据库应用研发能力提升方面的工作,Oracle ACE ,拥有 Oracle OCM & OCP .EXIN Dev ...

  6. MySQL索引的概念以及七种索引类型介绍

    MySQL索引的概念以及七种索引类型介绍. 文章目录 1 索引的概念 2 索引的类型 1 索引的概念 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数 ...

  7. mysql 索引语法_MySQL 索引:语法及案例剖析

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  8. 第43讲:MySQL数据库中前缀索引的概念以及使用

    文章目录 1.前缀索引的概念 2.前缀索引的检索过程 3.前缀索引的使用 3.1.计算出应该取出多少个字符串作为前缀基数 3.2.创建前缀索引 3.3.使用前缀索引列查询数据. 1.前缀索引的概念 当 ...

  9. mysql索引的概念和作用_索引的基本概念及作用

    索引:是一个数据结构,用来快速访问数据库表格或者视图里的数据,需要存储空间. 数据库的索引的原理:主要用于提高查询效率,也就是按条件查询的时候,先查询索引, 再通过索引找到相关的数据,索引相当于记录了 ...

最新文章

  1. mysql查看正在执行的sql语句
  2. 美丽新世界:这七个原因将让未来更美好
  3. Python组织文件 实践:将文件的不同版本备份为ZIP文件
  4. 哈尔滨工程大学计算机学院保研政策,哈尔滨工程大学计算机科学与技术学院(专业学位)计算机技术保研夏令营...
  5. 利用栈将中缀表达式转化成后缀表达式
  6. 线程同步--线程间通信
  7. 如何设置XMind思维导图线条
  8. php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
  9. easypoi 列合并_SpringBoot整合EasyPOI实现Excel、Word的导入导出功能
  10. 轩辕炼妖录java_一个Java对象的回忆录:那些被锁住的日子
  11. asp.net Framework 与 asp.net core 知识
  12. python中property函数_Python中的property()函数
  13. 投影机拼接融合技术--UE4拼接
  14. python数据分析论文报告电影_一个实战案例带你走完python数据分析全流程:豆瓣电影评论的关键词云图制作...
  15. 手机连接wifi时使用固定mac地址
  16. python操作VCF文件
  17. webpack中各个模块归纳总结图
  18. 多个pdf怎么合并成一个pdf?多个pdf文件怎么合并成一个文件?
  19. 计算机土木工程专业,土木工程专业需要什么样的电脑配置?
  20. 【汇正财经】股本的法律规范

热门文章

  1. Java 设计模式之外观模式
  2. Servlet 过滤器
  3. VTK:正态估计用法实战
  4. VTK:图像方向用法实战
  5. boost::mpl::abs相关的测试程序
  6. boost::mp11::mp_pairwise_fold_q相关用法的测试程序
  7. boost::mp11::mp_bind_front_q相关用法的测试程序
  8. boost::intrusive::avltree_algorithms用法的测试程序
  9. boost::remove_edge用法的测试程序
  10. boost::enable_current_exception用法测试程序