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

    基于jQuery的软键盘   前些天写了一个基于基于jQuery的数字键盘,今天给大家带来一个基于jQuery的全字母键盘插件(支持全字母大小写切换,数字输入,退格清除,关闭功能,可调整大小和键盘位置 ...

  2. strConnection连接Access数据库

    string strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;";            strConnection += @ ...

  3. ORACLE查询表最近更改的数据 VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE

    转自 http://blog.chinaunix.net/uid-8504518-id-3325718.html 今天开发人员问我如何快速并方便的查出一张表最近被更改的记录,这个需求很简单,由于是查最 ...

  4. C#中的三种timer

    转 https://blog.csdn.net/hoiven/article/details/51362582 如果你需要使用规律的时间间隔重复执行一些方法,最简单的方式是使用定时器(timer). ...

  5. [转载]Cool, Tomcat is able to handle more than 13,000 concurrent connections

    Last time I have promised you to take a look at more real life scenario regarding threads. In the la ...

  6. 创建和修改 ExpressRoute 线路

    本文介绍如何使用 Azure 门户和 Azure Resource Manager 部署模型创建 Azure ExpressRoute 线路. 以下步骤还说明如何查看线路状态,以及如何更新.删除和取消 ...

  7. ASP.NET Core 系列[1]:ASP.NET Core 初识

    ASP.NET Core 是一个跨平台的高性能开源框架,是一个用于连接到互联网的基于云的现代应用程序. ASP.NET Core 用于构建如 Web 应用.物联网(IoT)应用和移动后端应用,这些应用 ...

  8. eclipse中如何添加tomcat插件

    本篇简短的介绍了如何安装tomcat插件,因为不eclipse中不安装插件就没有tomcat图标,也就无法正常关闭服务器而只能terminate.废话不多说,直接进入主题: 1.首先下载一个tomca ...

  9. 远程监视jboss应用java内存的配置

    前言 因为最近一个项目部署在客户那边运行一个月左右就会出现java内存溢出的问题,为了时时监控java内存的情况需要,需要远程查看服务器上java内存的一些情况.在公司模拟部署了远程监视linux下项 ...

  10. 可以简易设置文字内边距的EdgeInsetsLabel

    可以简易设置文字内边距的EdgeInsetsLabel 最终效果: 源码: EdgeInsetsLabel.h 与 EdgeInsetsLabel.m // // EdgeInsetsLabel.h ...