
MySQL
文章平均质量分 95
水墨之白
悟已往之不谏,知来者之可追!
展开
-
MySQL学习笔记(一)—MySQL基础架构
一、 数据库结构: 1.1 Server层:连接器 权限验证 尽量使用长连接,但是长连接会消耗内存,可以定时清理,也可以重新初始化链接资源查缓存(一般不用,除非读多写少 8.0移除)分析器 词法分析,语法分析,语法解析优化器 使用哪个索引 表连接顺序执行器 执行语句,查询是否具有读写权限1.2 存储引擎层InnoDB(默认存储引擎)MyISAM(不...原创 2019-04-10 19:40:27 · 203 阅读 · 0 评论 -
MySQL学习笔记(二)—MySQL事务及锁详解
一、隔离级别与视图的关系“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念“读提交”隔离级别,这个视图是在每个 SQL 语句开始执行的时候创建的“可重复读”隔离级别: 视图是在事务启动时创建的,整个事务存在期间都用同一个视图“串行化”隔离级别下直接用加锁的方式来避免并行访问二、可重复读可重复读是MySQL默认级别每条记录在更新的时候都会同时记录一条回滚操作...原创 2019-09-16 11:36:02 · 443 阅读 · 0 评论 -
MySQL学习笔记(三)—数据库意向锁和元数据锁
存储引擎:InnoDB一、意向锁意向锁的分类:意向共享锁,事务想要给数据库某些行加共享锁,需要先获取意向共享锁意向互斥锁,事务想要给数据库某些行加互斥锁,需要先获取意向互斥锁意向锁是表锁 !!!为什么需要意向锁?主要为了实现多粒度锁。LOCK TABLE table_name READ;用共享锁锁住整个表LOCK TABLE table_name WRITE;用互斥锁锁住整...原创 2019-06-26 20:57:23 · 2141 阅读 · 0 评论 -
MySQL学习笔记(四)—MySQL不同隔离级别加锁实战
表记录如下:pid(int)name(varchar)num(int)1a1002b2003c3007d200Condition:PID为主键索引共享锁(读锁):简称S锁互斥锁(写锁):简称X锁MySQL的行锁都是加在索引上,称为记录锁(Record)数据库引擎:InnoDB一、数据库隔离级别为:RC / RU(读已提...原创 2019-06-27 19:33:29 · 752 阅读 · 4 评论 -
MySQL学习笔记(五)—MySQL索引详解
注: 本文基于InnoDB引擎一、数据库索引简介加快数据库查询速度而建立的目录二、索引数据结构MySQL数据索引使用的是B+树,多路平衡查找树。特性:由于磁盘预读,数据库每次读取行数据时会读取该行所在的页设二叉树的阶数为m,则m/2 <= k <= mB+树的节点存储元素数量为k - 1,所以树节点的元素数量等于数据库的页大小,默认16kB+树的叶子节点都...原创 2019-04-28 09:30:44 · 591 阅读 · 1 评论 -
MySQL学习笔记(六)—MySQL普通索引和唯一索引的区别
一、change buffer介绍A special data structure that records changes to pages in secondary indexes. These values could result from SQL INSERT, UPDATE, or DELETE statements (DML). The set of features invol...原创 2019-09-18 16:06:38 · 355 阅读 · 0 评论 -
MySQL Explain命令详解
idid是用来顺序标识整个查询中SELELCT 语句的,在嵌套查询中id越大的语句越先执行。该值可能为NULL,如果这一行用来说明的是其他行的联合结果select_type表示查询的类型,显示本行是简单或复杂select类型说明simple$1600primary包含union或者子查询,最外层的部分标记为primarysubquery一般子查询中的子...原创 2019-12-11 20:00:56 · 337 阅读 · 0 评论 -
MySQL大数据量分页limit优化
limit用法SELECT * FROM t LIMIT 10,10;第一个参数指定第一个返回记录行的偏移量第二个参数指定返回记录行的最大数目如果只给定一个参数:它表示返回最大的记录行数目第二个参数为 -1 表示检索从某一个偏移量到记录集的结束所有的记录行初始记录行的偏移量是 0(而不是 1)所以上面SQL的含义是查询数据库第10条到第20条数据对于小的偏移量,直接使用li...原创 2019-11-15 00:08:53 · 1842 阅读 · 7 评论 -
MySQL count(*) count(1) count(column)区别
MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 InnoDB 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数count函数count(主键 id) ,InnoDB 引擎会遍历整张表,把每一行的 id 值都取出来,返回给 server 层。server 层拿到 id 后,判断是不可能...原创 2019-04-16 20:44:21 · 1069 阅读 · 0 评论 -
MySQL连接(join)原理
一、MySQL JOIN分类INNER JOIN,内连接,返回左右表互相匹配的所有行LEFT JOIN,左外连接,返回左表的所有行,若某些行在右表里没有相对应的匹配行,则将右表的列在新表中置为NULLRIGHT JOIN,右外连接,返回右表的所有行,若某些行在左表里没有相对应的匹配行,则将左表的列在新表中置为NULLFULL JOIN,MySQL不支持,可以使用左外连接和右外连接的联合查...原创 2019-12-20 11:43:44 · 1678 阅读 · 0 评论 -
MySQL行转列案例分析
建表:成绩表:表名score,列名:学号、课程号、成绩CREATE TABLE `score` ( `s_id` varchar(20) NOT NULL, `c_id` varchar(20) NOT NULL, `s_score` int(3) DEFAULT NULL, PRIMARY KEY (`s_id`,`c_id`)) ENGINE=InnoDB DEFAULT...原创 2019-12-14 10:08:01 · 366 阅读 · 0 评论 -
MySQL "order by"是怎么实现的?
定义表:CREATE TABLE `t` (`id` int(11) NOT NULL,`city` varchar(16) NOT NULL,`name` varchar(16) NOT NULL,`age` int(11) NOT NULL,`addr` varchar(128) DEFAULT NULL,PRIMARY KEY (`id`),KEY `city` (`city...原创 2019-04-17 19:31:04 · 521 阅读 · 0 评论 -
数据库分库分表思路
一个闲暇的周末下午读到这篇分库分表文章,获益匪浅,转载之一. 数据切分关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容无非就是数据切分(Sharding),...转载 2019-11-23 15:42:04 · 271 阅读 · 0 评论 -
一文看懂MySQL索引
数据库的定义数据库和实例MySQL 的架构数据的存储如何存储表.frm 文件.ibd 文件如何存储记录行溢出数据数据页结构索引索引的数据结构聚集索引和辅助索引聚集索引辅助索引索引的设计锁并发控制机制锁的种类锁的粒度锁的算法Record LockGap LockNext-Key Lock死锁的发生事务与...转载 2019-04-07 11:43:23 · 250 阅读 · 0 评论 -
MySQL查询语句优化30条建议
SQL执行顺序(逻辑上的)(7)SELECT (8)DISTINCT (11)<select_list> (1)FROM <left_table> (3)<join_type> JOIN <right_table> (2)ON <join_condition> (4)WHERE <where_condition&g...原创 2018-09-01 16:10:59 · 344 阅读 · 0 评论