公司最近开始尝试进行改革,如何活跃团队气氛。开发就给我们说了一些算是科普类的数据库知识,下面参杂自己的理解,方便自己后续翻看。
 
1、什么是索引  
  索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。(注:以下的说明主要针对的是B+树索引)
  
2、索引的用途
  索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
 
3、索引的原理
a、二叉树
b、字典的索引理解(此处省略一万字,简单的来说就是不停的拆分,粒度越小越好)
    
4、索引的创建
a、索引不是越多越好
  只从读的角度考虑,其实索引是越多越好的。综合考虑的话就不是这样了:
  首先就是存储空间的问题,索引越多,占用的存储空间越大(一般一张数据库的表存储空间分开两块,一块是存储索引的,一块是存储数据的)。
  其次是新增和修改数据的时候,如果索引字段有变更的话,对I/O的操作会造成几何倍的增加。
 
b、索引字段最好是数字
  数字类索引占用的空间最小。其实还是和多叉树的数据分配有关,字符类的索引树层级不稳定。
 
c、索引要选择不经常变更的字段
  见 4.a
 
d、索引建立在离散度大的字段上
  离散度的树的分叉才能多,索引命中率才会高。(离散度我的理解是数据分布相对于整个数据集的比例,数据的分散程度越大,越有代表性)
 
e、索引的最左原则
  这是索引中很重要的一个特性,即索引的匹配是从左到右的。比如一个联合索引由('name','sex','age')组成,如查询('女','24')这样的数据,数据库找不到最开始的name,那么这条SQL就不会用到索引。如果查询('青莲','23')这样的数据,数据库会先找到名字是“青莲”的数据,然后发现缺少B,就会把所有名字是青莲的数据找出来,然后再去匹配age=23的数据。
 
f、关于索引排序
  这是随着公司业务发展而衍生出来的一个东西,我也是第一次知道索引这东西还能通过排序去进一步优化。例如A&B&C三个字段组成的联合索引,可以把A&B索引出来的数据,通过排序,然后在用C去检索。当然只针对查询的性能来说,和检索A&B&C是几乎一样,但是针对特殊业务场景,还是可以这样做的(例如在满足A&B索引的条件下,一个动态的id,每次只取前20条数据)  
 
g、关于查询尽量只查用到的字段
  我们一直听到的是select尽量别用星号(*),但其实这里消耗的性能并没有我们想象的那么多。
  上面说过,表的存储空间分为两块(索引和数据),所以如果我们需要查询的数据在索引字段中就有了,那么就没必要再去数据那边跨区查找了,这部分的查询消耗资源就能大幅度节约。
 

Mysql基础知识—索引的更多相关文章

  1. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  2. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  3. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

  4. MySQL基础知识:创建MySQL数据库和表

    虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...

  5. mysql基础知识大全

    前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...

  6. MySQL基础知识:启动管理和账号管理

    整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...

  7. MySQL基础知识:Character Set和Collation

    A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...

  8. mysql基础知识详解

    分享一些mysql数据库的基础知识. 1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理.2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程.3 ...

  9. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型

    1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...

随机推荐

  1. 使用Python生成基础验证码教程

    pillow是Python平台事实上的图像处理标准库.PIL功能非常强大,但API却非常简单易用. 所以我们使用它在环境里做图像的处理. 第一步 下载pillow #运行命令 pip install ...

  2. DNS隧道实战&&cobaltstrike利用dns隧道

    前言 使用 dns 隧道进行 tcp 通信. 正文 首先配置域名 配置一个 A 记录指向我们的 vps, 然后配置几个 ns 记录,指向刚刚设置的 A 记录 然后在服务端安装 wget https:/ ...

  3. python 字符串的方法和注释

    capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...

  4. Eclipse连接sqlserver体验过程

    以前装的sqlserver 2008试用期到了,就按照网上的步骤,彻底删除了sqlserver,然后又重新装了下,再用eclipse连接的时候,发现提示TCP/IP被禁用,然后找到了sqlserver ...

  5. springMVC结合AjaxForm上传文件

    最近在项目中需要上传文件文件,之前一直都是form提交的,尝试了一下AjaxForm,感觉还比较好用,写篇随笔mark下,供以后使用. 准备工作: 下载jquery-form.js 相关jar: co ...

  6. 使用 PowerShell 创建和修改 ExpressRoute 线路的对等互连

    本文可帮助使用 PowerShell 在资源管理器部署模型中创建和管理 ExpressRoute 线路的路由配置. 还可以检查 ExpressRoute 线路的状态,更新.删除和取消预配其对等互连. ...

  7. 从零开始学习Docker

    由于项目中可能用到docker容器,在此记录一下我的学习过程 1,docker的安装,wget -qO- https://get.docker.com/ | sh,查看docker是否安装成功: 此处 ...

  8. 编写带有点击特效的UIButton

    编写带有点击特效的UIButton 效果: 源码: // // ViewController.m // Button // // Created by XianMingYou on 15/1/18. ...

  9. mysql的表和数据类型

    一.查看当前数据库所有表 mysql> use db Database changed mysql> show tables; Empty set (0.00 sec) #表示db数据库下 ...

  10. sql 模糊查询优化

    在sql语句中使用 like模糊查询时,应该尽量避免%%,因为模糊查询是比较慢的,当出现这样的情况时,应该考虑优化. 举个例子:我在表中查询2012 年创建的记录 SELECT * FROM `com ...