mysql分客户端、服务层、存储引擎层,而索引的实现就是在存储引擎层,因此各个不同的存储引擎之间的索引都有细微的差别。

【B-Tree索引】

  

  • MyIsam使用前缀压缩技术使得索引更小,Innodb则按照原数据格式进行存储
  • MyIsam索引通过数据的物理位置引用被索引的行,Innodb则根据主键引用被索引的行。
  • 索引树中的节点是有序的,所以索引适合全键值、键值范围或键前缀查找(最左)。因为是顺序的,所以也适合排序。
  • 联合索引的索引顺序很重要

【哈希索引】

  • 基于哈希实现。
  • 只有Memory引擎显式支持哈希索引
  • 哈希索引只包含哈希值和行指针,而不存储字段值
  • 哈希索引数据并不是按照索引值顺序存储的
  • 哈希索引不支持部分索引列匹配查找,哈希索引值是使用索引列全部内容来计算哈希值的
  • 哈希索引只支持等值比较查询
  • 访问哈希索引的数据比较快,但是有多哈希值冲突的风险。

【全文索引】

  查找匹配的是文本中的关键词,类似于搜索引擎


【索引的优点】

  • 减少表数据的扫描数量,不用全表扫描了
  • 避免排序和临时表【索引按顺序的,节省了排序时间】。
  • 将随机I/O变为顺序I/O

【重点】【高效实用索引的技巧】

  1. 在索引列不要进行计算,例如下

    select student_id from student where student_id + 1 =5;

  2. 给text类型添加索引时,可以使用前缀索引,就是将值的内容截取一部分作为索引。

  3. 联合索引(多列索引)要注意列顺序。一般是考虑的因素是,使用率最高的列放到索引前列,避免随机IO,排序。

  4. 聚簇索引,表示数据行和相邻的键值紧凑的存储在一起。innodb默认会拿主键作为聚簇索引,若没有主键,就是用非空索引,主键为顺序的整数更加有利。
  5. 表中的索引越多,插入的速度越慢,准确的说是insert  update delete
  6. 索引可以让查询锁定更少的行
  7. 确保任何group by和order by中的表达式只涉及到一个表中的列。
  8. 除非确实需要服务器小虫重复的行,否则一定要使用union all,mysql是通过创建临时表的方式来执行union查询。

【MySQL能够使用三种方式应用WHERE条件,从好到坏的顺序为】

  1. 在索引中使用where条件来过滤不匹配的记录,在存储引擎层完成
  2. 使用索引覆盖扫描来返回记录,直接从索引中过滤不需要的记录并返回命中的结果,在服务器层完成的
  3. 从数据表返回数据。

【查询的执行流程】

  

转载于:https://www.cnblogs.com/ymkfnuiwgij/p/8642587.html

MySQL重温笔记-索引相关推荐

  1. 高性能mysql学习笔记--索引

    高性能mysql 五:索引 1,B-Tree索引 全值匹配:匹配所有列. 匹配最左前缀:只使用索引的第一列. 匹配列前缀:只使用索引的第一列. 匹配范围值:只使用索引的第一列. 精确匹配某一列并范围匹 ...

  2. mysql学习笔记-索引优化【1】-索引失效原因

    索引失效应该避免 案例(索引失效) # demo 数据 DROP TABLE IF EXISTS `staffs`; CREATE TABLE `staffs` (`id` int(11) NOT N ...

  3. 【面试题笔记-Java】MySQL数据库、索引、MVCC等知识点(自己整理)

    MySQL 1.MySQL的索引 索引就是帮助MySQL高效获取数据排好序的数据结构 索引数据结构: 二叉树 红黑树 hash表 B树 1.单指索引一个索引只包含单个列,一个表可以有多个单列索引 2. ...

  4. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

  5. mysql原生建立索引_MySQL学习笔记之索引

    索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但 ...

  6. mysql 学习笔记--存储引擎、索引、sq优化

    全面的 mysql学习笔记–通用语法.函数.数据类型.约束.多表查询.事务 全面的 mysql学习笔记–存储引擎.索引.sql优化 全面的mysql学习笔记–视图/存储过程/触发器.锁.InnoDB引 ...

  7. MySQL学习笔记-主键索引和二级索引

    文章目录 MySQL学习笔记-主键索引和二级索引 1.笔记图 2.索引的常见模型 3.InnoDB 的索引模型 4.主键索引和普通索引查询的区别 5.如何选择主键字段 6.笔记图 7.回表过程 8.最 ...

  8. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程

    目录 01.反馈 02.回顾 03.并发访问MySQL-问题概述 并发访问的问题 04.并发访问MySQL-问题演示 05.并发访问MySQL-read-committed解决脏读问题 06.并发访问 ...

  9. MySQL 学习笔记-第三篇-索引、存储过程和函数、视图、触发器

    目录 1 索引 1.1 索引简介 1.2 创建索引 1.3 删除索引 1.4 MySQL 8.0 的新特性 1 -支持降序索引 1.5 MySQL 8.0 的新特性 2 -统计直方图 2 存储过程和函 ...

最新文章

  1. ANNOTATION PROCESSING 101 by Hannes Dorfmann — 10 Jan 2015
  2. 续上篇随笔:陈勇提示做分批载入需要用到的数据
  3. 传统登录实现方式问题思考
  4. 1443B. Saving the City
  5. 查了一晚上的资料,累啊。
  6. Android URI简介
  7. IEEE745浮点数格式
  8. Swagger入参为List
  9. 小提琴1234567位置图解_小提琴入门指法(小提琴1234567位置图解)
  10. linux下解压system.img,小白如何修改解包打包system.img
  11. 营销/网赚/seo/淘宝资料收集下载
  12. ubuntu上安装drcom
  13. 多御安全浏览器快捷键汇总
  14. 酸奶能通便吗?身体知道酸奶用效果给你答案
  15. 软件开发公司管理手册
  16. c陷阱与缺陷总结-”悬挂“else
  17. 《一套适合 SAP UI5 开发人员循序渐进的学习教程》读者意见反馈和下一步写作计划表
  18. 秀动自动抢票 selenium 版本发布
  19. DHCP snooping 原理和工作工程:
  20. Tikz作图教程:动手 VS 动脑? 97行代码 VS 6行代码?

热门文章

  1. Linux常用基本命令(cut)
  2. Golang入门教程(十七)Linux/Windows下快速搭建和配置NSQ
  3. 解决grub引导错误的问题
  4. GWT笔记(Google Web Toolkit)1
  5. 一套简约漂亮的响应式博客园主题皮肤分享给你们(一)
  6. Spring 梳理 - ContentNegotiatingViewResolver
  7. spring 链接池
  8. [转]机器学习和深度学习资料汇总【01】
  9. 分区格式化/挂载数据盘
  10. oracle 操作表