首页 > 数据库 >Mysql之其他知识汇总

Mysql之其他知识汇总

时间:2022-10-10 20:02:10浏览次数:57  
标签:匹配 name age 知识 汇总 id 索引 Mysql 主键

日志类型

 

数据类型

1.更小的通常更好
能正确存储的最小数据类型,优点是占用磁盘、内存和CPU都少
2.简单就好
3.尽量避免使用null
在数据库中null不等于null
对游湖和索引和值的比较都很复杂

MyISAM和InnoDB存储引擎对比

对比项MyISAMInnoDB
主外键 不支持 支持
事务 不支持 支持
行级锁 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作时只锁一行,不对其他行有影响,适合高并发的操作
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真是数据,对内存要求较高,而且内存大小对性能由决定性的影响
表空间
关注点 性能 事务
默认安装

MySQL数据结构之最左匹配

MySQL InnoDB B+树,叶子节点直接放置整条数据
注意:

  1. InnoDB是通过B+Tree结构对主键创建索引,然后叶子节点中存储记录,如果没有主键,那么会选择唯一键,如果没有唯一键,那么会生成一个6字节的row_id来作为主键
  2. 如果创建索引的键是其他字段,那么在叶子节点中存储的是该记录的主键,然后再通过主键索引找到对应的记录,叫做回表。简单来说就是数据库会再根据索引创建一个B+Tree,这个树中存的就是索引和对应的主键

回表:就是上述情况,比如主键是id,索引列是name,这样查找name=‘AAA’,就会是先查找name,找到后根据name对应的id,再到另一个索引树中找到id对应的完整的一条数据

聚簇索引:数据和索引放在同一个文件中(比如:InnoDB)
非聚簇索引:数据和索引分开放在两个文件中(比如:MyISAM)

分布式程序不建议主键自增,会引发页分裂和页合并的问题
普通单机程序建议使用主键自增

回表

比如主键是id,并且给name添加了索引,此时数据库会创建两个B+Tree,如果执行select * from table where name = ?,会先在name和id的树中找到id,再用id在另一个树中找到整条数据,这就是回表

索引覆盖

上述情况中,如果查询select id from table where name = ?,直接查询一个树就能得到结果,不用回表就叫索引覆盖

索引下推

select * from table where name = ?and age = ?
这条语句执行的话,会从磁盘先查出符合name = ?的所有数据,加入到mysql server中,再根据age进行筛选

有了索引下推后,会根据name和age来拉取数据,不用在server层做数据的筛选

最左匹配

组合索引,比如name+age,一定是先匹配name再匹配age
举例:

  1. where name = ? and age = ?
  2. where name = ?
  3. where age = ?
  4. where age = ? and name = ?

上述例子中1,2,4会使用索引,4会经过优化成为1
CBO:基于成本的优化
RBO:基于效率的优化

索引下推唯一的缺点是需要在磁盘上多做数据筛选,原来的筛选是放在内存中的,现在放到了磁盘查找数据,并且所有的数据是聚集存放,所以性能不会有影响,而且整体的IO量会大大减少,反而会提升性能

MySQL中的一些名词和概念

MRR:
全称是mult_range read
在内存中做排序

FIC
全称是fast index create
没有FIC时索引的修改过程:

  1. 先创建一个临时表,增删改的操作在临时表中操作
  2. 删除原始索引表
  3. 修改临时表替换原始表

有了FIC后的索引修改过程:
FIC给当前表添加一个share锁,不会有创建临时文件的资源消耗,还是在源文件中,但是此时如果有人发起DML操作,很明显数据完全不一致,所以添加share锁,读取没问题,但是DML会有问题

这部分名词和概念还需要仔细百度一下

索引分类

  1. 主键索引:主键
  2. 唯一索引:值唯一的列
  3. 普通索引:也叫辅助索引、二级索引,除了主键和唯一列以外的创建了索引的列
  4. 全文索引:很少使用,被ES搜索引擎取代
  5. 组合索引:多个字段组合的索引

引匹配方式

  1. 全值匹配:组合索引中的所有的列进行匹配
  2. 匹配最左前缀:只匹配前面的几列
  3. 匹配列前缀:可以匹配某一列的开头部分(like A%可以正常匹配,like %A则会导致索引失效)
  4. 匹配范围值:可以查找某一个范围的数据
  5. 精确匹配某一列并范围匹配另一列:可以查询第一列的全部值和第二列的部分值
  6. 只访问索引列:查询的时候值需要访问索引,不需要访问数据行,本质上i就是索引覆盖

哈希索引

索引优化的小细节

索引监控

MySQL基础知识

MySQL索引详解

 

 

标签:匹配,name,age,知识,汇总,id,索引,Mysql,主键
From: https://www.cnblogs.com/qiulong/p/16758573.html

相关文章

  • comp3411-prolog辅导(一)基础知识
    本文介绍的prolog内容如下:如果没有Linux环境的话,建议在浏览器的在线网页中学习prolog。文章目录​​1.install​​​​2.introduction​​​​3.variables​​​​4.if......
  • Flask 学习-87.Flask-APScheduler 持久化定时任务保存到mysql数据库
    前言APScheduler有四种组件,分别是:调度器(scheduler),作业存储(jobstore),触发器(trigger),执行器(executor)。jobstores存储jobstores支持四种任务存储方式memory:......
  • Navicat客户端因为版本问题连接不上mysql解决办法
    原因:新旧版本的密码加密方式不同解决办法:登录mysql中mysql-uroot-p1234usemysqlALTERUSER'root'@'localhost'IDENTIFIEDWITHmysq......
  • 函数的参数、名称空间知识
    昨日内容回顾硬盘操作数据的原理数据在计算机硬盘上保存时是一次性的,数据保存后即不可能再对这段数据内部进行修改。计算机数据的删除实质是对保存数据部分硬盘状态的......
  • es集群知识
    ElasticSearch集群 1.ElasticSearch集群相关概念1.ES集群颜色状态①.—红色:数据都不完整②.—黄色:数据完整,但是副本有问题③.—绿色:数据和副本全都没......
  • 服务器搭建(CenOS 7 Apache + PHP _Mysql环境(LAMP))
    服务器搭建(CenOS7Apache+PHP_Mysql环境(LAMP))第一步、更换阿里云yum源curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo......
  • 如何搭建知识库网页?
    随着经济、信息技术的迅速发展,知识资源成为企业无形资产的重要组成部分。目前,企业的核心竞争力不仅取决于企业的硬件设备、资金实力、资源数量和人员数量,还取决于企业对知识......
  • mysql CPU过高排查
    最近发现mysqlCPU使用率高,将排查步骤记录一下一、top命令找到PID为24319二、vmstat1查看一下CPU使用率三、pidstat-u查看一下CPU使用率​四、pidstat-t-p2431......
  • 企业如何低成本快速搭建团队知识库,实现企业知识管理?
    企业知识库不仅包含了企业宏观发展规划、企业文化等方面的知识内容,还包括了各个部门的微观知识内容。比如:培训资料、学习资料、客户资料、市场资料等等,都是企业内部信息的汇......
  • 展示出你的创意,知识库搭建也可以这样玩!
    在我们的印象中,录入数据,储存文档内容都是很枯燥烦琐的事,但是要想让团队能够及时地获取知识这些事又不得不做,一旦身心涣散很难做好该工作。那么有没有什么办法让我们在搭建知......