公司最近开始尝试进行改革,如何活跃团队气氛。开发就给我们说了一些算是科普类的数据库知识,下面参杂自己的理解,方便自己后续翻看。
 
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. js处理包含中文的字符串

    场景: js中String类型自带的属性length获取的是字符串的字符数目,但是前端经常会需要限制字符串的显示长度,一个中文字符又大概占两个英文小写字符的显示位置,所以中英文混合的情况下用lengt ...

  2. 用jquery实现带左右按键的轮播图

    成品如下: 简单来说就是点击“右”按钮时,转换到右边的下一幅图片,同时上面的小方块颜色也跟着改变,如果已经是最后一幅图片,再点击“右”,则转换到第一幅图片,是直接向左移找到第一幅图的,明天再做一下无缝 ...

  3. CentOS7系列--1.1CentOS7安装

    CentOS7安装 1. 下载CentOS7 下载的网址为: http://isoredirect.centos.org/centos/7/isos/x86_64/ 2. CentOS7安装 2.1. ...

  4. 微信小程序为什么不被看好?

    我自认为对新技术还是比较有热情的,可对于小程序这个“新技术”,我却完全是被动的.去年9月份的时候,微信小程序开始内测,瞬间引爆朋友圈.知乎等一众分享平台.当时我大概了解了一下,觉得从技术角度上来说没啥 ...

  5. 前端模块化方案全解(CommonJS/AMD/CMD/ES6)

    模块化的开发方式可以提高代码复用率,方便进行代码的管理.通常一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数.目前流行的js模块化规范有CommonJS.AMD.CMD以及ES6的模块 ...

  6. 使用cancelBubble竟然可以阻止所有浏览器的冒泡?

    以前一直以为cancelBubble是IE8及以下的专属,今天做一个测试的时候意外发现了所有浏览器都支持,便提出来希望有哪位解释下. 1.使用原生js在FF下和chrome下两种方法都可以阻止冒泡 d ...

  7. js判断字符串出现的次数

    // 判断substr字符串在str中出现的次数 isIgnore是否忽略大小写! function countSubstr(str, substr, isIgnore) { var count; v ...

  8. gitlab在centos7和ubuntu16 上的安装

    虽然之前也了解了一些开源的git代码服务器,后来也认同了gitlab的优越性,也认识到了gitlab的普及性,自己也是在网上查了一些资料,很多资料都是分应用安装,例如安装redis nginx rub ...

  9. 【Kendo UI系列开发使用笔记】01-简单介绍

    ps:接触telerik出品的kendo ui系列已经快有一年了,使用过程中也在不断踩坑填坑.这套UI用起来还是非常爽的,尤其asp.net mvc版的配合lambda表达式来配置参数非常流畅.这次对 ...

  10. Oracle EBS 解决OAF黑屏,卡顿,反应慢