MySQL
文章平均质量分 76
晴天小哥哥
追求卓越, 成功就会在不经意间追上你
展开
-
MySQL面试之一条SQL是如何执行的
一 MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。先简单介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图,在 1.2 节中会详细介绍到这些组件的作用。**连接器:**身份认证和权限相关(登录 MySQL 的时候)。 **查询缓存:**执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。 分析器:没有命中缓存的话,SQL.原创 2021-09-09 17:10:40 · 281 阅读 · 0 评论 -
MySQL面试之三大日志详解
前言MySQL日志 主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的还要属二进制日志binlog(归档日志)和事务日志redo log(重做日志)和undo log(回滚日志)。今天就来聊聊redo log(重做日志)、binlog(归档日志)、两阶段提交、undo log(回滚日志)。redo logredo log(重做日志)是InnoDB存储引擎独有的,它让MySQL拥有了崩溃恢复能力。比如MySQL实例挂了或宕机了,重启时,...原创 2021-09-09 15:26:42 · 458 阅读 · 0 评论 -
MySQL面试题之InnoDB对MVCC的实现
一致性非锁定读和锁定读一致性非锁定读对于一致性非锁定读(Consistent Nonlocking Reads)的实现,通常做法是加一个版本号或者时间戳字段,在更新数据的同时版本号 + 1 或者更新时间戳。查询时,将当前可见的版本号与对应记录的版本号进行比对,如果记录的版本小于可见版本,则表示该记录可见在InnoDB存储引擎中,多版本控制 (multi versioning)就是对非锁定读的实现。如果读取的行正在执行DELETE或UPDATE操作,这时读取操作不会去等待行上锁的...原创 2021-09-09 14:36:39 · 499 阅读 · 0 评论 -
MYSQL扣除余额,扣除库存的SQL
1. 需求:扣除余额,或者库存(一般先扣缓存,再扣库存, 库存扣除失败,回滚缓存,redis的incr语句),满足高并发需求2. 设计SQL示例sql, 这边以扣除余额为例(无缓存),mysql会根据id进行行锁处理,高并发下没有问题 update xxx_account set balance = balance - #{chargeCost} , day_balance = day_balance - #{ch原创 2021-05-19 16:10:55 · 2084 阅读 · 0 评论 -
Java记录一次百万级别数据扫表统计的任务
一. 需求:统计近200万商家数据, 每日通过查询计费系统更新其余额二. 技术栈:抛开分布式定时任务系统Elastic-Job之外, 我们先优先把单系统极限优化挖掘出来, 由于博主接手的是14年的老项目, 本地甚至都无法启动,所以不尝试用高级玩法(数据分片, 消息中间件).1. Java1.72. Mysql数据库5.7三. 思路分析:流程如下1: 扫表几百万数据表的扫表面临的问题很简单, 当我们分页查询到百万级别以上(甚至几十万)的时候limit 800000, 1原创 2020-11-24 10:53:47 · 2808 阅读 · 0 评论 -
Mysql百万数据扫表优化
一、大数据量分页查询方法:1、直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺点: 全表扫描,速度会很慢,且有的数据库结果集返回不稳定(如某次返回1,2,3,另外的一次返回2,1,3),Limit限制的是从结果集的M位置处取出N条输出,其余抛弃。//是用limit函数//取前5条数据select * from table_nam.原创 2020-11-24 10:11:49 · 2222 阅读 · 0 评论 -
ElasticSearch(八)ElasticSearch与Mysql同步数据解决方案
ES数据和数据库数据如何同步整合?1. canel的通道是利用mysql的bin_log同步2. 通过消息队列同步,优势失败重试机制保证100%同步成功本文介绍通过RocketMq消息队列同步:首先是架构思路图:CRUD操作与我们的平时一样,但是在CRUD操作后我们会向RocketMq服务器事先定义好的Topic发送消息, 注意:Topic是同一个, 根据不同Tag来判断是什么类型的操作(新增, 删除, 更新), 废话不多说直接看代码github地址:1. 准备RocketM原创 2020-08-10 18:13:57 · 2677 阅读 · 3 评论 -
mysql面试题《六》覆盖索引与回表
前言:select id,name where name='shenjian'select id,name,sexwhere name='shenjian'多查询了一个属性,为何检索过程完全不同?什么是回表查询? 什么是索引覆盖? 如何实现索引覆盖? 哪些场景,可以利用索引覆盖来优化SQL?这些,这是今天要分享的内容。画外音:本文试验基于MySQL5.6-InnoDB...转载 2020-05-03 22:10:27 · 1075 阅读 · 1 评论 -
Mysql获取最大自增Id
select max(id) from table_xxx;原创 2020-01-13 12:40:39 · 1248 阅读 · 0 评论 -
MySQL建数据库字符集与排序规则设定
1.字符集说明:一般选择utf8.下面介绍一下utf8与utfmb4的区别。utf8mb4兼容utf8,且比utf8能表示更多的字符。至于什么时候用,看你的做什么项目了,到http://blog.csdn.net/leelyliu/article/details/52879685看unicode编码区从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是...原创 2019-11-29 16:32:03 · 358 阅读 · 0 评论 -
Mysql中 explain 命令详解
explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了:例如: explain select * from t_user_basic t WHERE t.contact_id = '8a81833f666716ab016667513d7b0000';结果如图...原创 2018-12-29 17:26:00 · 1098 阅读 · 0 评论 -
Mac 之 通过homebrew安装和配置mysql
安装命令: brew install mysql安装完成之后,启动mysql: mysql.server start发现无此命令: command not found首先,检查是否是安装了。重新执行一遍: brew install mysql提示: Warning: mysql-5.7.17 already installed, i...原创 2018-11-19 01:09:34 · 697 阅读 · 0 评论 -
SpringBoot JPA中使用中如何写原生SQL
@Query(nativeQuery=true,value = "") value里写正常sql语句如果返回的是数据库对应的实体对象,那么sql的返回结果集字段别名中应该与该实体类中对应的数据库字段名一致,可以有多余字段,但不能少字段,nativeQuery代表本地数据库的sql语句上一个稍微复杂的sql, 占位符用" : ",public interface TXhCodeRepos...原创 2018-09-18 13:18:29 · 10943 阅读 · 2 评论 -
MySQL数据库中的Date,DateTime,TimeStamp和Time类型 (TimeStamp加实战)
类型定义DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以'YYYY-M...原创 2018-04-25 14:43:11 · 1894 阅读 · 0 评论 -
MySQL面试题(二)之数据类型,引擎,事务等
上一篇文章介绍了关于MySQL数据库基础题的一部分内容,很多朋友表示看着不过瘾,因此本文将更全面的把MySQL数据库基础题一并介绍完。除了基础题部分,小编计划收集整理的MySQL面试题还包括如下知识点或题型:MySQL高性能索引SQL语句MySQL查询优化MySQL高扩展高可用MySQL安全性为了避免收藏不看,让大家更有耐心看下去,印象更深刻些,小编将分五次分别发布这些内容,加上本文一共6篇,欢迎...原创 2018-04-25 16:39:40 · 793 阅读 · 0 评论 -
MySQL面试题(三)之MySQL高性能索引
上一篇文章介绍了关于MySQL数据库基础题,首先,谢谢大家的持续关注,您的关注是小编最大的动力。本文将介绍MySQL高性能索引。本文篇幅稍长,小编鼓励大家坚持看完,一定会有所收获。一 . 简单描述MySQL中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响?知识点分析此真题主要考察的是MySQL索引的基础和类型,由此延伸出的知识点还包括如下内容:MySQL索引的创建原则MySQL索...原创 2018-04-25 18:54:18 · 1939 阅读 · 0 评论 -
数据库索引创建,查询
索引的详解索引的创建 主键索引的创建 主键索引的创建有两种方式, 1 在创建表的时候, 直接在指定列或者某几列为主键 create table aaa(id int primary key , name varchar(32)) 2添加表后, 对指定列创建索引...原创 2018-04-26 10:55:14 · 6221 阅读 · 0 评论 -
MySQL数据库索引的原理(B-Tree)
我就不画图了, 首先, 先试想一下, 有个图书馆, 里面有10万本书, 有一本书叫"金瓶梅",有一天小明去图书馆想借一本书,就是金瓶梅,如果直接去找, 从10万本书里找, 一本本找过去, 估计也要个几年, 几年后估计小明也不想看金瓶梅了吧. 当然现实中图书馆肯定不能这么找书了, 一般图书馆会分类, 例如: 科学类: 物理书, 化学书..... ...原创 2018-04-26 16:50:26 · 656 阅读 · 0 评论 -
MySQL语句分类(详细划分)
Sql语句的分类详细总结一、 数据定义语言DDL(Data Ddefinition Language)SQL数据定义语言主要用来定义逻辑结构,包括定义基表,视图和索引。1、 定义定义表Create table<表名> (<列名字><数据类型>[列级完整性约束条件] , ………….);定义视图 视图:从一个或者几个基表或者视图导出的表(结果集),是一个...转载 2018-04-26 17:20:29 · 6699 阅读 · 0 评论 -
MySQL面试题(四)
上一篇文章介绍了MySQL高性能索引,本文将介绍MySQL的SQL语句编写。首先看一道真题有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条SQL语句,将B中age>50的记录的c1,c2更新到A表中同一记录中的c1,c2字段中考点分析这道题主要考察的是MySQL的关联UPDATE语句延伸考点:MySQL的关联查询语句...原创 2018-04-27 14:24:08 · 695 阅读 · 0 评论 -
MySQL面试题(五)SQL 优化
上一篇文章介绍了MySQL SQL语句编写考题,本文将介绍MySQL的查询优化考题。首先看一道真题请简述项目中优化SQL语句执行效率的方法,从哪些方面,SQL语句性能如何分析?考点分析:这道题主要考察的是查找分析SQL语句查询速度慢的方法延伸考点:优化查询过程中的数据访问优化长难的查询语句优化特定类型的查询语句如何查找查询速度慢的原因记录慢查询日志分析查询日志,不要直接打开慢查询日志进行分析,这样...原创 2018-04-27 14:37:09 · 602 阅读 · 0 评论 -
MySQL面试题(六)数据库的分库分表原理详解
上一篇文章介绍了MySQL的查询优化考题,本文将介绍MySQL的高可扩展和高可用。首先看一道真题简述MySQL分表操作和分区操作的工作原理,分别说说分区和分表的使用场景和各自优缺点。考点分析分区表的原理分库分表的原理延伸:MySQL的复制原理及负载均衡分区表的工作原理对用户而言,分区表是一个独立的逻辑表,但是底层MySQL将其分成了多个物理子表,这对用户来说是透明的,每一个分区表都会使用一个独立的...原创 2018-04-27 17:38:25 · 12036 阅读 · 0 评论 -
MySQL性能压力测试
针对数据库的测试,市面上已经有很多工具了,Google 上搜一下 sql testing tool , 他为你选出的工具,琳琅满目,看花双眼。比如:40+ Best Database Testing Tools - Popular Data Testing Solutions 这篇文章列举了总共 43 个测试工具,可以用来完成 SQL 的测试,包括生成测试数据,功能性测试,逻辑性测试,当然还有压力...原创 2018-05-14 10:48:06 · 5052 阅读 · 1 评论 -
MySQL面试题(一)之 数据类型详解
问题1:char、varchar的区别是什么?答:varchar是变长而char的长度是固定的。提示:如果你的内容是固定大小的,你会得到更好的性能。问题2: TRUNCATE和DELETE的区别是什么?答:DELETE命令从一个表中删除某一行,或多行,TRUNCATE命令永久地从表中删除每一行。问题3:什么是触发器,MySQL中都有哪些触发器?答:触发器是指一段代码,当触发某个事件时,自动执行这些...原创 2018-04-25 10:21:59 · 722 阅读 · 0 评论