MySQL
文章平均质量分 86
一笑杯莫停
HelloWorld
展开
-
MySQL为什么表数据删掉一半,表文件大小不变?
RT先看一下数据库表的空间回收。这里只说InnoDB,InnoDB分两部分,表结构定义和数据。MySQL8.0之前表结构在.frm的文件中,8.0以后的版本允许放在系统表中,因为表结构定义占用空间其实很小。接下来重点看表数据。参数 innodb_file_per_table数据表可以存在共享表空间,也可以存单独的文件,由innodb_file_per_table这个参数控制,参数的值有两种:OFF:表示表数据存放在共享表空间,和数据字典放在一起 ON:表示表数据存储再.ibd后缀的文件中M.原创 2021-03-31 11:12:47 · 359 阅读 · 0 评论 -
MySQL的两个重要日志
DBA 同事说,MySQL 可以恢复到半个月内任意一秒的状态,惊叹的同时也好奇,到底是怎么做到的呢?一条查询SQL语句的执行过程是经过连接器(查询缓存不做考虑)——>分析器——>优化器——>执行器后到达存储引擎调用接口。那么,一条更新语句是如何执行的呢?连接器连接到数据库server,由于要更新所以查询缓存会被清空(这也是我们不用查询缓存的原因),然后到分析器分析语法词法,再到优化器,优化器决定索引的选择(这个地方很有趣,优化器会根据统计信息来选择索引,所以这个地方不一定会使用我们原创 2021-03-25 16:28:22 · 217 阅读 · 2 评论 -
InnoDB的change buffer
什么是change buffer?当MySQL要更新一个数据页的时候,如果这个数据页正好在内存中,就直接更新,而如果这个数据页不在内存中的话,在不影响数据一致性的前提下,InnoDB会将这些更新缓存到change buffer中,这样就能减少对磁盘的访问。当下次访问这个数据页的时候,将这个数据页加载到内存,然后执行change buffer中的操作。通过这个流程保证逻辑上的正确性。显然将更新操作缓存到change buffer可以减少磁盘IO,由于是缓存执行速度也有极大提升,而且是读入内存是要占用b..原创 2021-03-23 14:47:27 · 220 阅读 · 0 评论 -
事务隔离级别总结
事务的隔离性提起事务的隔离性,首先想到的是事务的四大特性ACID。那么现在要总结的就是隔离性I,当多个事务同时进行时,会出现:为了解决这些问题,就有了事务隔离级别的概念。事务隔离级别...原创 2020-09-25 11:12:20 · 95 阅读 · 0 评论 -
关于SQL子查询
什么是SQL子查询子查询就是查询的嵌套,有时候我们无法直接在数据表中得到查询结果,这时候将一个查询(这就是子查询)的结果集当做主查询的查询对象,这样就支持了比较复杂的查询,有点面向对象的意思。子查询分为关联子查询和非关联子查询 子查询有一些关键词方便对子查询的结果进行比较(存在性检测子查询EXISTS,集合比较子查询IN、SOME、 ANY 和 ALL) 子查询可以当做主查询的列关联子查询和非关联子查询的判断依据是子查询是否执行多次下面以NBA(脚本)为例,创建几张表:球员表:原创 2020-09-18 16:44:22 · 830 阅读 · 0 评论 -
常用的SQL函数介绍
什么是 SQL 函数?首先说什么是函数。函数就是我们用的比较多的,通用的代码封装起来。用的时候只需要通过函数名称并输入参数的方式来调用。这样可以降低代码的耦合性,减少代码的冗余,提高编程的灵活度和效率。SQL中的函数一般都是加载到数据之后,对结果数据进行操作,得到我们想要的值。内置的 SQL 函数都包括哪些?SQL有内置函数,也可以自定义函数,内置函数一般对不同的数据库具有通用性内置函数分类:算术函数 字符操作函数 日期操作函数 转换函数算术函数举几个例子:SE原创 2020-09-09 15:34:10 · 2376 阅读 · 0 评论 -
MySQL排序(Order By)为什么要使用索引
MySQL排序(Order By)为什么要使用索引1. WHERE条件句中使用索引以查询一条程咬金 记录为例:创建索引先创建一个二级索引不选择索引字段做条件查询key=null 执行计划中没有用到索引 rows=69 全表扫描使用索引字段作为条件查询key=name_index 使用到索引name_index rows=1对比结论在选条件语句中不加索引字段,索引会失效,包括聚簇索引。 使用的索引避免了全表扫描2. Ord...原创 2020-09-08 15:22:37 · 13118 阅读 · 5 评论 -
MySQL常用关键字使用方法(随时补充)
MySQL常用关键字下面列举一些常见的关键字使用方法,及注意事项。去重DistinctDISTINCT+列名,表示按该列去重 DISTINCT 需要放到所有列名的前面,否则会报错 DISTINCT 后面加多列,其实是对后面所有列名的组合进行去重排序Group By排序的列名:ORDER BY 后面可以有一个或多个列名,如果是多个列名进行排序,会按照后面第一个列先进行排序,当第一列的值相同的时候,再按照第二列进行排序,以此类推。 排序的顺序:ORDER BY 后面可以注明排序规则,AS原创 2020-09-08 11:22:18 · 1057 阅读 · 0 评论 -
MySQL索引失效5种情况
MySQL索引失效5种情况:1.索引字段在查询时存在隐式的类型转换比如student表有字段phone定义为vachar类型,且定义为辅助索引,当查询语句写成:select id,name from student where phone =18628562245此时用explain 执行这条语句会发现存在Key = NULL说明没有用到phone这个索引2.对索引字段使用LIKE左模糊匹配,左右模糊匹配但是使用右模糊匹配是没有问题的3. 对索引字段进行表达式计算如age.原创 2020-09-01 11:48:25 · 825 阅读 · 0 评论