当前位置: 首页 > news >正文

MySQL——索引基础

本篇文章,我们将从索引基础开始,介绍什么是索引以及索引的几种类型,然后学习如何创建索引以及索引设计的基本原则。

本篇文章中用于测试索引创建的user表的结构如下:

什么是索引

索引(在 MySQL 中也叫“键key”)是存储引擎快速找到记录的一种数据结构

——《高性能MySQL》

我们需要知道索引其实是一种数据结构,其功能是帮助我们快速匹配查找到需要的数据行,是数据库性能优化最常用的工具之一。其作用相当于超市里的导购员、书本里的目录。

索引类型

可以使用SHOW INDEX FROM table_name;查看索引详情

  1. 主键索引 PRIMARY KEY

    它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引。

    注意:一个表只能有一个主键

  2. 唯一索引 UNIQUE

    唯一索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

    可以通过ALTER TABLE table_name ADD UNIQUE (column);创建唯一索引

    可以通过ALTER TABLE table_name ADD UNIQUE (column1,column2);创建唯一组合索引

  3. 普通索引 INDEX

    最基本的索引,它没有任何限制。

    可以通过ALTER TABLE table_name ADD INDEX index_name (column);创建普通索引

  4. 组合索引 INDEX

    组合索引,即一个索引包含多个列。多用于避免回表查询。

    可以通过ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3);创建组合索引

  5. 全文索引 FULLTEXT

    全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。

    可以通过ALTER TABLE table_name ADD FULLTEXT (column);创建全文索引

索引一经创建不能修改,如果要修改索引,只能删除重建。可以使用DROP INDEX index_name ON table_name;删除索引。

索引设计的原则

  1. 适合索引的列是出现在where子句中的列,或者连接子句中指定的列

  2. 基数较小的类,索引效果较差,没有必要在此列建立索引

  3. 使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间

  4. 不要过度索引。索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以只保持需要的索引有利于查询即可。

参考

  • 《深入浅出MySQL》



                                                       -----END-----

                 喜欢本文的朋友们,欢迎扫一扫下图关注公众号撸码那些事,收看更多精彩内容

                                           


相关文章:

  • 用Go语言实现微信支付SDK
  • 文档和元素的几何滚动
  • Java编程——数据库两大神器:索引和锁
  • 80% UI 初学者走过的弯路,你走了几条?
  • Numpy数值计算基础
  • MYSQL设置查询内存表大小
  • 聊聊rocketmq的FileAppender
  • JS高级
  • MongoDB4.0构建分布式分片群集
  • (六)Hibernate的二级缓存
  • 用 PreparedStatement 向 SqlServer 中一次性插入多条记录
  • redis的高级特性
  • 新版ExTiX 诞生,基于 Ubuntu 的桌面 Linux 发行
  • 移动端测试===从安卓手机截图到桌面的几行代码
  • redis系列:通过日志案例学习string命令
  • git 常用命令
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Phpstorm怎样批量删除空行?
  • Puppeteer:浏览器控制器
  • ucore操作系统实验笔记 - 重新理解中断
  • Vue.js-Day01
  • 从零开始在ubuntu上搭建node开发环境
  • 简单实现一个textarea自适应高度
  • 简析gRPC client 连接管理
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 什么是Javascript函数节流?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 用jquery写贪吃蛇
  • 用jQuery怎么做到前后端分离
  • C# - 为值类型重定义相等性
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • (1)(1.11) SiK Radio v2(一)
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (175)FPGA门控时钟技术
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (二)windows配置JDK环境
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .describe() python_Python-Win32com-Excel
  • .NET Core 版本不支持的问题
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET企业级应用架构设计系列之应用服务器
  • .net项目IIS、VS 附加进程调试
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Data注解的作用
  • @EventListener注解使用说明
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • @开发者,一文搞懂什么是 C# 计时器!