索引设计原则

​ 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引。

  • 对查询频次较高,且数据量比较大的表建立索引。

  • 索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用、过滤效果最好的列的组合。

  • 使用唯一索引,区分度越高,使用索引的效率越高。

  • 索引可以有效的提升查询数据的效率,但索引数量不是多多益善,索引越多,维护索引的代价自然也就水涨船高。对于插入、更新、删除等DML操作比较频繁的表来说,索引过多,会引入相当高的维护代价,降低DML操作的效率,增加相应操作的时间消耗。另外索引过多的话,MySQL也会犯选择困难病,虽然最终仍然会找到一个可用的索引,但无疑提高了选择的代价。

  • 使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O效率,也可以提升总体的访问效率。假如构成索引的字段总长度比较短,那么在给定大小的存储块内可以存储更多的索引值,相应的可以有效的提升MySQL访问索引的I/O效率。

  • 利用最左前缀,N个列组合而成的组合索引,那么相当于是创建了N个索引,如果查询时where子句中使用了组成该索引的前几个字段,那么这条查询SQL可以利用组合索引来提升查询效率。

创建复合索引:CREATE INDEX idx_name_email_status ON tb_seller(NAME,email,STATUS);就相当于对name 创建索引 ;对name , email 创建了索引 ;对name , email, status 创建了索引 ;

MySQL 高级 - 索引 - 索引设计原则相关推荐

  1. 13、MySQL索引的设计原则

    索引的设计可以遵循一些已有的原则,创建索引的时候应尽量考虑符合这些原则,便于提升索引的使用效率,更高效的使用索引.本节将介绍一些索引的设计原则. 1. 选择唯一性索引 唯一性索引的值是唯一的,可以更快 ...

  2. MySQL高级 —— 高性能索引

    引言 最近一直在抱着<高性能MySQL(第三版)>研究MySQL相关热点问题,诸如索引.查询优化等,这阶段的学习是前一段时间MySQL基础与官方的"阅读理解"的进一步延 ...

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

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

  4. MYSQL高级篇-----索引优化分析

    索引优化分析 下面是目录可跳转对应页面学习: 2. 索引优化分析 2.1 原因 SQL执行顺序 2.2 常见通用的join查询 2.3 索引 2.3.1 索引分类(重点) 2.3.2 索引结构 2.3 ...

  5. MySQL高级及索引优化

    这里写目录标题 MySQL高级 MySQL基础 存储引擎 join(关联查询) join七种理论 索引 什么是索引 索引分类 索引数据结构 建立索引情况 索引分析 explain命令分析 索引失效 查 ...

  6. Mysql高级部分--索引、锁等详解

    1.索引 1.1.概念 1.2.索引的优势和劣势 1.3.索引的分类 1.4.mysql索引结构 1.4.1.B树的检索原理 1.初始化介绍: 一颗B+树,浅蓝色的块我们称之为一个磁盘块,可以看到每个 ...

  7. MySQL高级 之 索引面试题分析

    索引优化简单案例 单表 需求:查询category_id为1 且 comments大于1 的情况下,views最多的id 1.无索引的情况下: 很显然,type是ALL,即最坏的情况,Extra还出现 ...

  8. MySQL 高级 —— 复合索引简介(多列索引)

    引言 复合索引是指包含多个数据列的索引,与之概念相对的是单列索引,仅包含一个数据列.在大多数情况下,建立多列索引的好处都要多于单列索引.另外,复合索引最多支持16个列,但请一定不要让复合索引包含太多的 ...

  9. MySQL高级:索引优化之防止索引失效

    前言:数据库索引优化,但是可能出现索引失效,我们该怎样防止这种情况发生呢>> 文章目录 1. 案例建表: 1.1 staffs表 1.2 建立索引: 2.案例:索引失效 2.1 全面匹配索 ...

  10. MySQL高级or索引失效情况

    用or分割开的条件, 如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到. 示例,name字段是索引列 , 而createtime不是索引列,中间是or进行连接是不走索引的 ...

最新文章

  1. python 等号报错_Python学习----Python基础
  2. Windows 2000、XP、XP+进程名描述
  3. Selenium3自动化测试——15.调用Javascript进行滚动条控制
  4. 用C语言打开文件的几种方式及区别
  5. 计算机连接网络名称,更改Windows Server Core计算机名字 以及配置网络连接
  6. 深入理解ES6之迭代器与生成器
  7. 全网最细之instanceof和类型转换
  8. 06旋转数组的最小数字
  9. Too many input arguments.
  10. jTip定制实现博客日历
  11. 【LeetCode】【数组】题号:*118,杨辉三角
  12. 基于Java的体育场地预约系统
  13. PUN搭建大厅与网络同步
  14. 计算机视觉算法 面试必备知识点(2022)
  15. web前端知识体系之基础知识 - CSS语言和功能
  16. python seek函数whence_file.seek(offset[, whence])
  17. MySQL的二叉树、平衡二叉树、2,3查找树、B树、B+树索引
  18. 屏下指纹技术实现方案与原理
  19. 最常用36个英语万能动词的词组短语和习惯用语大全!
  20. elasticsearch win10 安装

热门文章

  1. Html.BeginForm() vs Ajax.BeginForm() in MVC3
  2. 编译期间确定类型安全——泛型(Generics)
  3. Michael Nygard on Building Resilient Systems
  4. MR/hive/shark/sparkSQL
  5. C#修改系统环境变量,调用批处理bat
  6. 118. Pascal's Triangle
  7. GDB 远程调试Linux (CentOS)
  8. javascript代码解释执行过程
  9. 使用命令行建立Zend Framework项目
  10. 新疆出差——特色美食大合集