MySQL
为什么坚持?
人的痛苦源于对自己无能的愤怒!!!
Don't forget, a person's greatest emotional need is to feel appreciated.
莫忘记,人类情感上最大的需要是感恩。
展开
-
ROW_NUMBER和RANK和DENSE_RANK的区别
Sql格式SELECT *,row_number() over(ORDER BY investment desc) as `row_number`,dense_rank() over(order by investment desc) as `dense_rank`,rank() over(order by investment desc) as `rank`FROM investmenttabrow_number 排序值从小到大,依次排列dense_rank 相同数据,并列保存,不原创 2021-09-13 20:58:44 · 4292 阅读 · 0 评论 -
MySQL 一个字段多条件查询
<select id="selectByParam" parameterType="com.model.TmallUpkeepPeriodDO" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from upkeep_period WHERE 1=1 <if test="id != null and id != 0原创 2020-09-06 22:04:14 · 1582 阅读 · 0 评论 -
MySQL GROUP_CONCAT
GROUP_CONCAT用来合并字段使用SELECT store_id FROM istore原始数据是这样的需求想合并多行数据为一行数据SELECT GROUP_CONCAT(store_id ) from (SELECT store_id FROM store GROUP BY store_id ) a注意事项:GROUP_CONCAT后面必须紧连着字段,不能有空格group by 字段必须和 group_concat 字段必须一致...原创 2020-08-24 10:14:10 · 159 阅读 · 0 评论 -
Mysql limit 查询优化
原SQLEXPLAIN SELECT * FROM td_tmall_car_adapter_prop LIMIT 200000,10;优化后SQLEXPLAIN SELECT * from td_tmall_car_adapter_prop a INNER JOIN (SELECT id from td_tmall_car_adapter_prop order by id LIMIT 200000,10) b on a.id = b.idexplant 执行顺序 1、如果id相原创 2020-08-13 13:49:34 · 195 阅读 · 0 评论 -
MySQL 执行计划 explain 详解
mysql执行计划 在企业的应用场景中,为了知道优化SQL语句的执行,需要查看SQL语句的具体执行过程,以加快SQL语句的执行效率。 可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。 官网地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html1、执行计划中包含的信息ColumnMeaningidThe SELE原创 2020-06-21 18:38:00 · 154 阅读 · 0 评论 -
MySQL 谓词下推
谓词下推优化关系 SQL 查询的一项基本技术是,将外层查询块的 WHERE 子句中的谓词移入所包含的较低层查询块,从而能够提早进行数据过滤以及有可能更好地利用索引。举例说明:有表:t_student(student_id, student_name, student_age)t_score(score_id, student_id, course_id, score_number)EXPLAIN SELECT * FROM t_student t1 right JOIN (SELECT *原创 2020-06-21 18:15:49 · 1820 阅读 · 2 评论 -
MySQL 二叉树 AVL树 红黑树 B-树 B+树 B*树
二叉树一个节点最多只有两个子节点树的层级结构比较深左右两边数据层级不一致,查询的层级数量不稳定平衡二叉树 (AVL)一个节点最多只有两个子节点左右两边层级深度差不能大于1数据量大时,树的层级比较深插入 删除 的效率低,查询效率高红黑树 (red / black tree)旋转 + 变色左右两边最长深部不能大于最短深度的两边一条链中不能出现两个相连的红色一个节点中的两个链中黑色节点是一样的AVL树的一个升级,提升了增删的效率左旋 右旋B树每一个节点都保原创 2020-06-21 17:10:51 · 398 阅读 · 0 评论 -
索引合并
MySQL在 5.0版本中引入新特性:索引合并优化(Index merge optimization),当查询中单张表可以使用多个索引时,同时扫描多个索引并将扫描结果进行合并。通俗解释就是: 一条SQL中使用两个或多个索引,查出来的数据集取交集或并集该特新主要应用于以下三种场景:1、 对OR语句求并集,如查询SELECT * FROM TB1 WHERE c1=“xxx” OR c2=""xxx"时,如果c1和c2列上分别有索引,可以按照c1和c2条件进行查询,再将查询结果合并(union)操作,原创 2020-06-21 14:25:12 · 1692 阅读 · 0 评论 -
MySQL索引使用场景
场景一: 通过身份证来查找用户信息的场景1 使用拉链式解决阻塞点: 如果在身份证建立索引,由于身份证长度过长,占空间不建议使用hash链表解决每次保存身份证的时候,对身份证进行hash,算出hash值hash值 + 身份证 + userId (冗余字段)保存到中间表中每次查询的时候,先获取到hash值,通过索引获取少量数据,在遍历身份证拿到正确的数据的userId适用于单一...原创 2019-11-24 15:46:58 · 393 阅读 · 0 评论 -
MySQL的隔离级别
MySQL 中的事务都是在引擎层实现的A actomictity 原子性C consistency 一致性I Isolation 隔离性D Durability 持久性InnoDB引擎 和 MyISAM引擎 的区别:索引不通,InnoDB是非聚簇索引,MyISAM是聚簇索引InnoDB支持事务,MyISAM不支持事务...原创 2019-11-24 15:10:40 · 91 阅读 · 0 评论 -
MySQL的组成
连接器:数据库跟客户端建立连接show processlist 显示MySQL数据库的连接情况wait_timeout 默认8小时长连接 短连接长连接: 连接成功后,客户端持续请求,则一直使用同一个连接短连接: 每次执行完几次很少的查询就断开连接,下次查询再重新建立连接建立连接比较耗费性能,但是长连接时间长了又耗费内存定期断开连接,在使用了一个占用大内存的连接后,断开连...原创 2019-11-20 17:42:21 · 454 阅读 · 1 评论 -
redo log 和 bing log 的区别
先介绍两个重要的日志模块redo log(InnoDB 引擎层的日志)当一条记录需要更新时InnoDB会把记录写到redo log 中并更新到内存中InnoDB会在系统空闲的时候把记录更新到磁盘中redo log的大小是固定的,比如分成四份writte pos是当前记录位置,一边写,一遍往后移check point 是当前擦的位置,一遍擦,一边往后移如果write po...原创 2019-11-13 21:21:45 · 968 阅读 · 0 评论 -
MYSQL InnoDB 的缓冲池 预读失效 缓存池污染
InnoDB的缓存池作用:缓存表数据和索引数据,把磁盘上的数据加载到缓冲池中,避免每次都进行磁盘IO,起到加速访问的效果.LRU算法(Least recently used):把入缓存池的页放在LRU的头部,作为最近访问的元素页在缓冲池中的数据,把它放在队列的前面(情景一)页不在缓冲池中的数据,把它放在队列的前面,同时淘汰队列后面的数据(情景二)情景一情景二My...原创 2019-11-11 23:27:38 · 1230 阅读 · 1 评论 -
MySQL索引覆盖 回表查询
MySQL InnoDB有两种索引:聚簇索引叶子节点存放的是主键ID+行数据普通索引叶子节点存放的是主键ID什么是回表查询:t(id PK, name KEY, sex, flag);什么是索引覆盖?索引覆盖:通过普通索引查询的时候,不需要回表查询,直接可以获取到对应的数据还是上面的例子,如果查询为:select name,id from t wher...原创 2019-11-11 11:44:56 · 385 阅读 · 0 评论 -
MySQL 的聚簇索引
聚簇索引:聚簇索引:索引跟行记录是一起存储的非聚簇索引:索引与行记录是分开存储的MyISAM的索引其主键索引与普通索引没有本质差异:有连续聚集的区域单独存储行记录主键索引的叶子节点,存储主键,与对应行记录的指针普通索引的叶子结点,存储索引列,与对应行记录的指针InnoDB的索引没有单独区域存储行记录主键索引,存储的主键和对应的记录行非主键索引叶子节点存储的主键聚...原创 2019-11-09 15:55:04 · 161 阅读 · 0 评论 -
MySQL为什么使用B+树索引
为什么数据库加了索引,查询就快了?没有索引,mysql查任何数据都需要全表扫描有了索引,就相当于书有了目录,可以减少查询范围InnoDB使用的就是B+树为什么哈希(hash)比树(tree)快,InnoDB还要选择B+树结构?hash 例如hashMap 增删改查的时间复杂度为o(1)树 例如 B+树 增删改查的平均时间复杂度为o(lg(n))相对于单一查询,hash...原创 2019-11-09 15:38:38 · 253 阅读 · 0 评论 -
MySQL 两阶段锁协议
MySQL 两阶段锁协议在InnoDB事务中,行锁是需要的时候才加上的,但并不是不需要立马释放,而是等事务结束后释放,这个就是--------两阶段协议.两阶段锁协议引起的死锁事务A在等事务B释放Id = 2 的锁, 事务B在等事务A释放id = 1 的锁,导致发生死锁死锁检测:...原创 2019-10-08 11:02:20 · 581 阅读 · 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 (`i...原创 2019-09-07 14:30:19 · 124 阅读 · 0 评论