首页 > 数据库 >MySQL 必知概念

MySQL 必知概念

时间:2024-09-22 21:46:01浏览次数:1  
标签:Join 索引 必知 Nested 概念 MySQL 驱动 id Loop

Delete、Drop 和 Truncate

  • delete、truncate 仅仅删除表里面的数据,drop会把表的结构也删除
  • delete 是 DML 语句,操作完成后,可以回滚,truncate 和 drop 是 DDL 语句,删除之后立即生效,不能回滚
  • 执行效率:drop > truncate > delete

MyISAM 与 InnoDB

  • InnoDB 支持事务,MyISAM 不支持
  • InnoDB 支持外键,MyISAM 不支持
  • InnoDB 是聚集索引,数据文件是和索引绑定一起的
  • MyISAM 是非聚簇索引,索引和数据文件是分离的,索引保存的是数据的指针
  • InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描
  • MyISAM 用一个变量保存整个表的行数,执行上述语句时只需要读出改变量即可,速度很快
  • InnoDB 支持表、行(默认)级锁,MyISAM 支持表级锁

Join 语句

left join、right join、inner join 的区别:

left join(左连接):

  • 返回包括左表中的所有记录和右表中联结字段相等的记录
  • 左表是驱动表,右表是被驱动表

right join(右连接):

  • 返回包括右表中的所有记录和左表中联结字段相等的记录
  • 右表是驱动表,左表是被驱动表

innner join(等值连接):

  • 只返回两个表中联结字段相等的行
  • 数据量比较小的表作为驱动表,大表作为被驱动表

join 查询在有索引条件下

  • 驱动表有索引不会使用到索引
  • 被驱动表建立索引会使用到索引、

所以在以小表驱动大表的情况下,给大表建立索引会大大提高查询效率

Join 原理

Simple Nested-Loop:

  • 驱动表中的每一条记录与被驱动表中的记录进行比较判断(笛卡尔积)
  • 对于两表联结来说,驱动表只会被访问一遍,但驱动表却要被访问到好多遍

Index Nested-Loop:

  • 基于索引进行连接的算法
  • 他要求被动表驱动表上有索引,可以通过索引来加速查询

Block Nested-Loop:

  • 它使用 Join Buffer 来减少内部循环读取表的次数
  • Join Buffer 用以缓存联接需要的列

选择 Join 算法优先级:

  • Index Nested-LoopJoin > Block Nested-Loop Join > Simple Nested-Loop Join

当不使用 Index Nested-Loop Join 的时候,默认使用 Block Nested-Loop Join

image-20240922213139478

分页查询优化

select * from table 
where 
type = 2 
and level = 9 
order by id asc 
limit 190289,10;

延迟关联:

  • 通过 where 条件提取出主键,再将该表与原数据表关联,通过主键 id 提取数据行,而不是通过原来的二级索引提取数据行

  • select a.* from table a,
    (
        select id from table 
        where type = 2 
        and level =9 
        order by id asc 
        limit 190289,10
    ) b 
    where a.id = b.id;
    

书签方式:

  • 找到 limit 第一个参数对应的主键值, 在根据这个主键值再去过滤并 limit

  • select * from table 
    where 
    id > (
        select * from table 
        where type = 2 
        and level = 9 
        order by id asc 
        limit 190289, 1
    	) 
    limit 10;
    

事务

标签:Join,索引,必知,Nested,概念,MySQL,驱动,id,Loop
From: https://www.cnblogs.com/zhzcc/p/18425960

相关文章

  • 为什么大多数开发人员都避免在MySQL表名和列名中使用中文?
    大多数开发人员避免在MySQL表名和列名中使用中文,主要有以下几个原因:1.兼容性问题不同的数据库系统和工具对字符集的支持各不相同。使用中文可能导致在不同平台或工具间的数据迁移和兼容性问题。2.编码和显示问题在某些开发环境或工具中,中文可能会出现乱码,导致调试和维护......
  • 第二十二讲:MySQL是怎么保证数据不丢的?
    第二十二讲:MySQL是怎么保证数据不丢的?简概开篇​ 今天这篇文章,我会继续和你介绍在业务高峰期临时提升性能的方法。从文章标题“MySQL是怎么保证数据不丢的?”,你就可以看出来,今天我和你介绍的方法,跟数据的可靠性有关。在专栏前面文章和答疑篇中,我都着重介绍了WAL机制(你可以......
  • MySQL的增删改查
    CRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写首先创建一张表:droptableIFEXISTSstudent;createtablestudent(idINT,snINT,--学号nameVARCHAR(20),--姓名qq_mailVARCHAR(20)--QQ邮箱......
  • [Mysql]基础入门篇_关于数据库的简介_初识DQL语句
    @[TOC]文章目录何为数据库数据库类型数据库管理系统(本博主使用的是Mysql数据库)何为SQL准备工作及select查询操作的简单使用何为数据库数据库是一个有组织的数据集合,允许高效存储、管理和检索信息。它通过结构化的方式存储数据,通常使用数据库管理系统(DBMS)来执行操作,如......
  • C++中模板的初级使用函数模板(刚刚接触模板概念的小白也能明白)
    文章目录模板分类函数模板函数模板的原理函数模板基本语法——typename以及class简单的函数模板多类型模板参数class和typename的选择类模板模板分类模板的核心思想是让编译器在编译时生成适用于具体类型的代码,这个过程称为模板实例化。C++中的模板分为两种:......
  • 专业学习|动态规划(概念、模型特征、解题步骤及例题)
    一、引言(一)从斐波那契数列引入自底向上算法(1)知识讲解(2)matlap实现递归(3)带有备忘录的遗传算法(4)matlap实现带有备忘录的递归算法“;”是为了不显示中间的计算结果;“==”双等号表示判断;“tic、toc”运算开始和结束的时间;(5)采用自低向上的算法进行求解和代码实现(二......
  • python如何操作mysql
    首先要通过pipinstallpymysql安装一个pymysql模块直接上代码:importpymysql#连接数据库conn=pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='root',db='test')#创建游标cursor=conn.cursor()#创建一张表#sql="createtablemy......
  • 七年级下册部分概念(至三角形)
    1.aᴹ×aⁿ=aᴹ⁺ⁿ(m,n都是正整数)同底数幂相乘,底数不变,指数相加2.球的体积公式是v=4/3πr³,其中V是球的体积、r是球的半径.3.(aᴹ)ⁿ=aᴹⁿ(m,n都是正整数)幂的乘方,底数不变指数相乘4.(ab)ⁿ=aⁿbⁿ(n是正整数)积的乘方等于括号里面数的乘方5.aᴹ÷aⁿ=aᴹ⁻ⁿ(a≠0,m,n都是正整数,且m>n)同......
  • 线程的概念与多线程模型
    目录线程的概念线程的属性多线程模型一对多模型​编辑​编辑​编辑多对一模型多对多模型​编辑​编辑线程的概念首先先了解有线程和没线程的区别没线程的进程:进程间虽可以相互切换并发执行,但每个进程内的程序不能相互切换并发执行。就比如你可以一边听音乐一遍聊微......
  • mysql安装(windows-mysql-8.1.0-winx64.zip安装)
    1、官网下载,解压缩2、配置环境变量3、新增my.ini文件,根据电脑环境修改配置 #设置mysql的安装目录 basedir #设置mysql数据库的数据的存放目录 datadirmy.ini文件内容如下:[mysqld]#设置3306端口port=3306#设置mysql的安装目录basedir=D:\kaifa\mysql-8.1.0-winx6......