IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mysql的索引 -> 正文阅读

[大数据]mysql的索引


1.hash索引

CREATE TABLE `testhash` (
  `fname` varchar(50) DEFAULT NULL,
  `lname` varchar(50) DEFAULT NULL,
  KEY `fname` (`fname`) USING HASH
) ENGINE=MEMORY;

为什么用MEMORY存储引擎,因为mysql只有MEMORY存储引擎显示支持哈希索引。
在这里插入图片描述
在这里插入图片描述
看如下查询:

select lname from testhash where fname ='Peter'

Mysql首先计算Peter的哈希值是8784,然后到哈希索引中找到对应的行指针,根据指针找到对应的数据行。 索引只存储哈希码及行指针,所以索引的数据结构非常的紧凑,这也让哈希索引查找速度非常快,但是哈希索引也有他的限制。

注:是不是和MISIAM存储引擎很相似,都是索引和数据分开的。


2.innodb默认不支持哈希索引

在这里插入图片描述
只能说一般是InnoDB自己在优化的过程中,才会自动的创建一张表来生成哈希索引。


3.优点和缺点

  • 等值查询比较快
  • 不适合范围查找

4.聚集索引和非聚集索引

  • 概念:什么是聚集索引,什么是非聚集索引?
    主要出发点:是要看索引的排列顺序和表记录的排列顺序是否一致,因为对于InnoDB存储引擎来说,其主要是B+树,而B+树的数据结构中,存储的索引+数据,同时保证了排列顺序的一致,所以是聚集索引,而MySIAM是非聚集索引。

  • 聚集索引:
    主键索引:在结构中同时保留了主键key+行记录 .ibd结构 (数据就这一份)
    辅助索引:在结构中为辅助键的key + 主键的key (这是什么结构?不知道)
    回表:所以对于辅助索引一般会有回表操作,但是对于索引覆盖可以避免回表,情形如下:

    select age from employee where age < 20
    
  • 非聚集索引
    主键索引:在结构中保存的是主键key + 行记录的地址 .myd .myi(本质:数据和索引分离)
    辅助索引:结构和主键索引一样


5.常见的索引

  • 主键索引(唯一为空)
    • 如果定义了主键,那么InnoDB会使用主键作为聚簇索引
    • 如果没有定义主键,那么会使用第一非空的唯一索引(NOT NULL and UNIQUE INDEX)作为聚簇索引
    • 如果既没有主键也找不到合适的非空索引,那么InnoDB会自动生成一个包含了ROW_ID值的列作为聚簇索引,行都会根据这个ROW_ID排序。
    • 注:没有主键的结果
      很明显,缺少主键的表,InnoDB会内置一列用于聚簇索引来组织数据。而没有建立主键的话就没法通过主键来进行索引,查询的时候都是全表扫描,小数据量没问题,大数据量就会出现性能问题。
  • 唯一索引
    就是唯一值的列建立的索引
  • 普通索引
    不涉及唯一+非空

6.哪些需要创建索引?哪些不需要创建索引?

  • 需要创建索引
  • 1.经常查询的字段可以加快速度
  • 2.主键(默认聚簇索引)
  • 3.where中常用的列字段
  • 4.在经常需要排序的列上加索引,**因为本身索引查出来就是有序的,**所以会加快速度
  • 5.在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
  • 哪些不需要创建索引
  • 1.查询中很少使用的字段
  • 2.对于那些定义为text, image和bit数据类型的列不应该增加索引:这是因为,这些列的数据量要么相当大,要么取值很少。 取值大,索引很复杂,取值小,建立不出什么东西。
  • 3.对于那些只有很少数据值的列也不应该增加索引,因为在查询的时候会涉及到很大数据行的,并且涉及到回表,所以不一定很快。

7.联合索引以及最左匹配原则?

  • MySql使用索引时需要索引有序,假设现在建立了“name,age,school”的联合索引。
  • 那么索引的排序为从左到右:先按照name排序,如果name相同则使用age排序,如果age也相等则使用school排序。
  • 原则:建立联合索引的时候要把查询频繁的字段放在前面。

8.如何查看创建的索引有没有被使用到?

  • 命令:explain
  • 分析:type字段
  • all、range、ref(该索引列的值并不唯一)、ref_eq(使用了索引,并且值唯一)、const(主键放在where后)

9.索引失效原则?

  • 使用不等<>= 查询
  • 不符合最左匹配原则
  • 联合索引,使用范围查找,后面的部分
  • like字段 like"%a",最左边是通配符
  • mysql优化器本身分析出不走索引快的时候
  • 索引列进行操作(表达式运算/分组函数)

10.索引的优缺点?

  • 优点:加快查询的速度
  • 缺点:数据的写入过程会涉及到索引的更新,也就是索引的维护
  • 1.节点的插入:主要涉及到节点的分裂,当然还有节点索引值的修改
  • 2.节点的删除:主要涉及到节点的合并,当然还有索引值的修改

https://cloud.tencent.com/developer/article/1692119
https://blog.csdn.net/doctor_who2004/article/details/77414742
https://www.nowcoder.com/discuss/389444?type=post&order=time&pos=&page=1&ncTraceId=&channel=-1&source_id=search_post_nctrack

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:53:24  更:2021-09-11 18:53:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:34:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码