首页 > 数据库 >MySQL-基础篇

MySQL-基础篇

时间:2023-12-20 23:44:47浏览次数:39  
标签:扫描 mysql 基础 查询 索引 MySQL ref 主键

索引的数据结构

二叉树

树高度普通二叉树最坏n.

红黑树

二叉平衡树,树高度logn+1.以20000000条数据为例,h=log20000000=25

Hash表

  • 对索引的key进行一次hash计算就可以定位出数据存储的位置
  • 很多时候Hash索引要比B+Tree更高效
  • 仅能满足=、in,不支持范围查询
  • hash冲突问题(数组+链表)

B-Tree

  • 叶子节点具有相同的深度,叶节点的指针为空。
  • 所有索引的元素不重复
  • 节点中的数据索引从左到右递增排列

B+Tree

  • 非叶子节点不存储data,只存储索引(冗余),索引空白部分指向其他页的地址,可以放更多的索引,
  • 查看页大小:show global status like 'innodb_page_size';

存储引擎

MyISAM:索引文件和数据文件是分离的,属于非聚集索引

  • test.frm 存放表结构等信息
  • test.MYD 存放数据
  • test.MYI 存放索引

InnoDB:索引文件和数据文件是不分离的,属于聚集索引

  • 表结构文件本身就是按B+Tree组织的一个索引结构文件。
  • 叶子节点包含了完整的数据记录。
  • 建议InnoDB表必须建主键,并且推荐使用整型的自增主键。
  • 非主键索引(二级索引)结构中的叶子节点存储的是主键值。
  • 保持一致性,若修改记录内容,只需要改一次主键索引中的数据,再更新非主键索引即可。
  • 节省空间,只用保留一份数据即可,若索引中全都要有完整数据,浪费硬盘。

explain工具介绍

  • 模拟优化器执行SQL语句
  • 分析你的查询语句或是结构的性能瓶颈
  • 执行查询会返回执行计划的信息
  • from 中包含子查询,仍会执行该子查询,将结果放入临时表中

explain中的type

  • system:system是const的特例
  • const:读取一次
  • eq_ref:primary key 或 unique key 索引的所有部分被连接使用 ,最多只会返回一条符合条件的记录。这可能是在const 之外最好的联接类型了,简单的 select 查询不会出现这种 type。
  • ref:相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行
  • range:范围扫描通常出现在 in(), between ,> ,<, >= 等操作中。使用一个索引来检索给定范围的行
  • index:通常扫描二级索引,扫描全索引拿到结果
  • all:全表扫描,可以考虑通过增加索引进行优化

效率对比:system>const>eq_ref>ref>range>inex>ALL

 

 

索引最佳实践

  • 全值匹配
  • 最左前缀法则
  • 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
  • 存储引擎不能使用索引中范围条件右边的列
  • 尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少 select * 语句
  • mysql在使用不等于(!=或者<>),not in ,not exists 的时候无法使用索引会导致全表扫描< 小于、 > 大于、 <=、>= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引
  • is null,is not null 一般情况下也无法使用索引
  • like以通配符开头('$abc...')mysql索引失效会变成全表扫描操作
  • 字符串不加单引号索引失效
  • 少用or或in,用它查询时,mysql不一定使用索引,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引
  • 范围查询优化

标签:扫描,mysql,基础,查询,索引,MySQL,ref,主键
From: https://www.cnblogs.com/nxjblog/p/17917894.html

相关文章

  • 2023-2024-120231329《计算机基础与程序设计》第13周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html这个作业的目标《C语言程序设计》第12章并完成云班课测试作业正文https://www.cnblogs.com/xjn123/p/17......
  • 【SpringBootWeb入门-16】Mybatis-基础操作-多条件查询操作&XML文件配置SQL
    1、章节回顾上一篇文章我们讲解了Mybatis的增改查操作,本篇继续学习Mybatis的复杂查询操作(多条件查询)。2、增删改查操作-多条件查询操作根据条件姓名、性别、入职时间来查询员工表emp数据,其中员工姓名支持模糊匹配,性别进行精确匹配,入职时间进行范围查询,查询结果按照最后修改时间......
  • Vue基础
    1vue是什么 2谁开发的 3Vue的特点  ......
  • linux安装jdk和mysql
    一、jdk安装1、yum-ylistjava*------------查看所有jdk版本2、yuminstall-yjava-1.8.0-openjdk.i686 ------------------安装指定jdk,yum会使用标准方式进行下载并安装 二、mysql安装1、wgethttp://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm......
  • 绘画新手入门素描基础技法,小白从零级到专业四级教学
    一、教程描述本套教程是关于素描绘画的,教程内容全面系统,讲解也是很专业的,不仅教你画好陶罐、苹果、人像、五官、玻璃制品等具体事物,同时也会介绍绘画起源与简史,艺术价值与意义,绘画思维与技法等相关知识。本套绘画教程,大小18.02G,共有102个文件。二、教程目录第01章-绘画起源与简史(共......
  • 2023-2024 20231313《计算机基础与程序设计》第十三周学习总结
    2023-202420231313《计算机基础与程序设计》第十二周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十三周学习总结作业内容《C语言程序设计》第12章并完成云班课测试作业正文我的作业目录教材总结总结学习过程的问题《C语言程序......
  • 鸿蒙开发之系统基础组件
    应用page的组成部分是组件组成的,系统提供了很多的组件Image/TextImage组件Image($r('app.media.logo')).width(78).height(509)使用string设置.width('78vp')//vpvm的像素单位使用定义资源json.width($r('app.float.logo_size'))在resources目录下......
  • MySQL——子查询用法
    1、子查询概述子查询指一个查询语句嵌套在另一个查询语句内部的查询,内部的查询是外部查询的条件,这个特性从MySQL4.1开始引入。SQL中子查询的使用大大增强了SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可......
  • 边做笔试边查缺补漏——算法、js基础、vue3官方文档、八股文
    边投简历边完善自己的知识库。最近这些天一直在面试和笔试+投简历中,每次面试或笔试完后其实最重要的不是结果,而是做题的过程或者说对话的过程。因为只有这些才让我知道自己哪里还有不足,比如一碰到算法题就歇菜、vue3和vue2混用、js基础知识不牢固等等。那我痛定思痛,有缺点咱就认......
  • JQuery基础
    1.简介JQuery能做什么?访问和操作DOM元素控制页面样式对页面事件进行处理扩展新的jQuery插件与Ajax技术完美结合为什么要用JQuery?使用JQuery可以大大的减少JS代码,简化DOM操作JQuery对象与DOM对象通过$(xx)获取到的都是jquery对象。而通过JS的getElementBy...获取到的......