索引

索引是什么

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度

索引目的

索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的.

索引原理

除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。

数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、<、between、in)、模糊查询(like)、并集查询(or)等等。数据库应该选择怎么样的方式来应对所有的问题呢?我们回想字典的例子,能不能把数据分成段,然后分段查询呢?最简单的如果1000条数据,1到100分成第一段,101到200分成第二段,201到300分成第三段……这样查第250条数据,只要找第三段就可以了,一下子去除了90%的无效数据。

索引相关操作 提高查询的效率

  • 查看表的索引

show index from 表名;
  • 创建索引
-- 如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
-- 字段类型如果不是字符串,可以不填写长度部分
create index 索引名称 on 表名(字段名称(长度))alter table 表名 add index 索引名称(字段名称(长度))
  • 删除索引
drop index 索引名称 on 表名;

常用的索引有三种 主键索引、普通索引和唯一索引

索引不是越多越好,哪些字段需要建索引呢?主键百分之百用到了索引,就是主键索引;(当你在一个表中设置了主键或者外键的时候,MySQL会默认给他加上索引,所以使用主键或外键进行查找操作的时候会非常的快,但是实际使用中对主键或者外键的直接使用是比较少的)

  • 普通索引key
create index 索引名称 on 表名(字段名称(长度))
alter table 表名 add index 索引名称(字段名称(长度))

唯一索引,unique,保证这个字段中的数据不会重复,如:一个字段记录了身份证号,此时就可以给他加上唯一索引保证数据不会重复;

create unique index 索引名称 on 表名(字段名称(长度))
方式二:
alter table 表名 add unique index 索引名称(字段名称(长度))
  • 1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。
  • 因为更新表时,不仅要保存数据,还要保存一下索引文件。
  • 2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。
  • 3.索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

MySQL进阶之索引相关推荐

  1. MySql进阶,索引,B-Tree以及索引优化

    MySql 2020年11月9日 14:06 MySql架构 2020年11月8日 20:19 从来没有思考过MySql的架构,了解了一下看来,MySql的架构是挺简洁的. 下图已经非常清楚,比较值得 ...

  2. MySQL进阶篇(03):合理的使用索引结构和查询

    本文源码:GitHub·点这里 || GitEE·点这里 一.高性能索引 1.查询性能问题 在MySQL使用的过程中,所谓的性能问题,在大部分的场景下都是指查询的性能,导致查询缓慢的根本原因是数据量的 ...

  3. 超详细图解!【MySQL进阶篇】存储过程,视图,索引,函数,触发器

    超详细图解![MySQL进阶篇]存储过程,视图,索引,函数,触发器 1.1 下载Linux 安装包 1.2 安装MySQL 1.3 启动 MySQL 服务 1.4 登录MySQL 2\. 索引 2.1 ...

  4. MySQL进阶篇(02):索引体系划分,B-Tree结构说明

    本文源码:GitHub·点这里 || GitEE·点这里 一.索引简介 1.基本概念 首先要明确索引是什么:索引是一种数据结构,数据结构是计算机存储.组织数据的方式,是指相互之间存在一种或多种特定关系 ...

  5. 【面试题 - mysql】进阶篇 - 索引

    进阶篇 索引 1 索引概述 2 优点.缺点 3 索引结构(B+,Hash) 3.1 二叉树 3.2 红黑树 3.3 B树 3.4 B+树 3.5 hash 4 面试题:为什么 InnoDB 存储引擎选 ...

  6. 超详细图解!【MySQL进阶篇】SQL优化-索引-存储引擎

    1. Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理 ...

  7. 超详细图解!【MySQL进阶篇】MySQL索引原理

    索引类型 索引可以提升查询速度,会影响where查询,以及order by排序.MySQL索引类型如下: 从索引存储结构划分:B Tree索引.Hash索引.FULLTEXT全文索引.R Tree索引 ...

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

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

  9. MySql进阶索引篇01——深度讲解索引的数据结构:B+树

    深度讲解索引的数据结构:B+树 1.索引介绍 1.1 为什么使用索引 1.2 索引的优缺点 2.从零开始设计索引 2.1没有索引时怎么查询数据 2.2 基于页的目录项的简单索引 2.3 InnoDB索 ...

最新文章

  1. Redis主从配置及通过Keepalived实现Redis自动切换高可用
  2. MVC3教程之新手入门(转)
  3. [diango]理解django视图工作原理
  4. ionic 实用技巧
  5. LINUX查看进程开始时间、结束时间、运行时间
  6. Python函数(2)
  7. PHP面试题:你常用到的mysql命令?
  8. 用JavaScript往DIV动态添加内容
  9. 2022年中国商业数据智能行业研究报告
  10. Django + react + 阿里云ecs 前后端分离部署上线
  11. flash player for linux 64,64-bit linux下装什么adobe flash player
  12. labview嵌入c代码_LabVIEW是什么?与其他组态软件有何分别?
  13. 如何设置访问共享弹出窗口
  14. linux shell rsync,linux – 如何在我的下面的shell脚本中使用rsync而不是scp来复制文件?...
  15. 安卓自动滑屏脚本_【按键精灵】开发抖音全自动养号脚本!可实现自动滑屏
  16. 21.iozone的使用与介绍
  17. html alt 作用,alt标签是什么意思,alt标签的作用及优化
  18. 360c301路由器安装openwrt18.06usb打印服务器
  19. 协方差与相关系数介绍
  20. Unix/Linux中的read和write函数

热门文章

  1. luaL_setfunc设置upvalue的用法示例
  2. Mybatis/Ibatis,数据库操作的返回值
  3. webpack入门+react环境配置 1
  4. UILabel 的属性设置
  5. IOS 如何获取ppi
  6. 2013.3.9学习日记
  7. 虚拟化系列-VMware vSphere 5.1 虚拟机管理
  8. VC 实现文件夹属性的获取与更改
  9. 容器编排技术 -- Kubernetes kubectl rollout resume 命令详解
  10. [转载] PGPool介绍和安装经验