MySQL
文章平均质量分 76
fFee-ops
it's tough.
展开
-
MySQL深度分页
深度分页问题的本质是在 MySQL 数据库中,通过 LIMIT 和 OFFSET 关键字进行分页时,MySQL 需要在每次查询时扫描整张表,直到找到当前页的数据。这种查询方式需要进行大量的磁盘 I/O 和内存操作,导致查询效率非常低下。当我们每次查询的记录数很小,但是查询次数很多时,就会产生大量的 I/O 操作,严重影响查询效率。例如有个sql假设假如 LIMIT 和 OFFSET 关键字同时进行使用的话,limit语句会先扫描offset+n行,然后再丢弃掉前offset行,返回后n行数据。原创 2023-05-08 11:32:29 · 3134 阅读 · 1 评论 -
一条SQL语句执行的顺序
大体来说,MySQL可以分为Server层和存储引擎层两部分。Server层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务 功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在 这一层实现,比如存储过程、触发器、视图等。存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、 Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了 默认存储引擎。原创 2022-11-21 17:41:29 · 3856 阅读 · 0 评论 -
linux的Mysql重置密码
linux的Mysql重置密码(1)先修改配置文件/etc/my.cnf令MySQL跳过登录时的权限检验,在[mysqld]下加入一行:skip-grant-tables(2)重启MySQLsystemctl restart mysqld(3)免密码登录MySQLskip-grant-tables(4)mysql客户端执行如下命令,修改root密码mysql> use mysql;MySQL> update mysql.user set authentication_s原创 2021-12-07 22:44:05 · 3726 阅读 · 0 评论 -
Mysql锁的种类以及加锁情况
Mysql锁的种类以及加锁情况锁的种类按照锁粒度按照是否可写另外两个表级锁加锁的情况怎么上读锁或者写锁关于是表锁还是行锁?for update锁的情况锁的种类按照锁粒度表锁:Mysql中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单 ,资源消耗也比较少,加锁快,不会出现死锁 。行锁:行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。 InnoDB支持的行级锁,包括如下几种。Record Lock: 对索引项加锁,锁定符合条件的行。原创 2021-09-01 00:05:36 · 196 阅读 · 0 评论 -
基于MySQL实现分布式锁
基于MySQL实现分布式锁适用场景基于唯一索引实现实现方式优点缺点适用场景基于Mysql实现分布式锁,适用于对性能要求不高(用mysql实现性能肯定不如用redis、zookeeper实现),并且不希望因为要使用分布式锁而引入新组件。基于唯一索引实现实现方式获取锁时在数据库中insert一条数据,包括id、方法名(唯一索引)、线程名(用于重入)、重入计数获取锁如果成功则返回true获取锁的动作放在while循环中,周期性尝试获取锁直到结束或者可以定义方法来限定时间内获取锁释放锁的时候,de原创 2021-06-23 14:57:11 · 671 阅读 · 0 评论 -
MySQL主从复制、读写分离
MySQL主从复制、读写分离为什么要用主从复制、读写分离?主从复制原理读写分离读写分离的实现方式为什么要用主从复制、读写分离?为了提高数据库的可用性、并发性能。你想如果是一台单机数据库,所有请求都打在它上面,那么就会导致I/O频率过高。假如有三台,一台主负责写,两台从负责读,那就会大幅提高性能。主从复制原理Relay log,我们翻译成中文,一般叫做中继日志,一般情况下它在MySQL主从同步读写分离集群的从节点才开启。主节点一般不需要这个日志。当master进行改动数据的操作时,会按照顺序记原创 2021-06-16 17:47:23 · 217 阅读 · 0 评论 -
Mysql面试技术名词
面试技术名词回表覆盖索引最左匹配索引下推举例回表假如有两个B+树索引分别如下面的图:(1)id为主键,聚集索引,叶子节点存储行记录;(2)name为KEY,普通索引,叶子节点存储id值; 然后现在有一条sql语句select * from t where name='lisi';看看执行过程:如粉红色路径,需要扫码两遍索引树:(1)先通过普通索引定位到主键值id=5;(2)在通过聚集索引定位到行记录;这就是所谓的回表查询,就是还要回表查询一次。覆盖索引还是用上面的例子,原创 2021-01-21 20:03:52 · 181 阅读 · 0 评论 -
MySqL锁机制
MDL不需要显式使用,在访问一个表的时候会被 自动加上。MDL的作用是,保证读写的正确性。你可以想象一下,如果一个查询正在遍历一个 表中的数据,而执行期间另一个线程对这个表结构做变更,删了一列,那么查询线程拿到的结果 跟表结构对不上,肯定是不行的。因此,在MySQL 5.5版本中引入了MDL,当对一个表做增删改查操作的时候,加MDL读锁;当 要对表做结构变更操作的时候,加MDL写锁。读锁之间不互斥,因此你可以有多个线程同时对一张表增删改查。读写锁之间、写锁之间是互斥的,用来保证变更表结构操作的安全性。原创 2020-07-17 12:10:49 · 472 阅读 · 1 评论 -
分析海量数据
文章目录模拟海量数据分析海量数据模拟海量数据通过 存储过程(无return)/存储函数(有return)来模拟。create database testdata ;use testdatacreate table dept(dno int(5) primary key default 0,dname varchar(20) not null default '',loc varchar(30) default '')engine=innodb default charset=utf8;原创 2020-07-16 14:51:38 · 252 阅读 · 0 评论 -
慢SQL排查
文章目录慢查询日志慢查询阀值:查询超过阀值的SQL慢查询日志慢查询日志:MySQL提供的一种日志记录,用于记录MySQL种响应时间超过阀值的SQL语句 (long_query_time,默认10秒)慢查询日志默认是关闭的;建议:开发调优时 打开,而 最终部署时关闭。检查是否开启了 慢查询日志 :show variables like '%slow_query_log%' ;①临时开启:set global slow_query_log = 1 ; --在内存种开启 在mysql服务重原创 2020-07-16 14:31:09 · 1445 阅读 · 0 评论 -
避免索引失效的一些原则
文章目录1、复合索引a.复合索引,不要跨列或无序使用(最佳左前缀)b.复合索引,尽量使用全索引匹配2、不要在索引上进行任何操作(计算、函数、类型转换),否则索引失效例如select ..where A.x = .. ; --假设A.x是索引不要:select ..where A.x*3 = .. ;explain select * from book where authorid = 1 and typeid = 2 ;--用到了at2个索引explain select * fro原创 2020-07-16 12:23:09 · 330 阅读 · 0 评论 -
优化案例
文章目录单表优化两表优化三张表优化A B C单表优化准备数据:create table book( bid int(4) primary key, name varchar(20) not null, authorid int(4) not null, publicid int(4) not null, typeid int(4) not null );insert into book values(1,'tjava',1,1,2) ;insert into book values原创 2020-07-15 14:21:20 · 269 阅读 · 0 评论 -
执行计划
文章目录两个问题执行计划两个问题a.分析SQL的执行计划 : explain ,可以模拟SQL优化器执行SQL语句,从而让开发人员 知道自己编写的SQL状况b.MySQL查询优化其会干扰我们的优化执行计划查询执行计划: explain +SQL语句例如:explain select * from tb ;id : 编号 select_type :查询类型table :表type :类型possible_keys :预测用到的索引key :实际使用的索引k原创 2020-07-11 14:08:07 · 283 阅读 · 0 评论 -
索引
文章目录分类创建索引删除索引查询索引BTree检索原理分类主键索引: 不能重复。id 不能是null唯一索引 :不能重复。id 可以是null单值索引 : 单列, age ;一个表可以多个单值索引,name。复合索引 :多个列构成的索引 (相当于 二级目录 : z: zhao) ;例如查字典要查zhao,先找到Z,然后再去Z的目录下找zhao创建索引方式一:create 索引类型 索引名 on 表(字段)举例:<假设有tb表(id,name,dept)原创 2020-07-10 22:48:18 · 192 阅读 · 0 评论 -
SQL优化
文章目录为什么要进行SQL优化优化Sql解析顺序索引的优缺点为什么要进行SQL优化原因:性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲、线程数)优化a.SQL :例如自己编写了一个SQL语句select dinstinct ..from ..join ..on ..where ..group by ...having ..order by ..limit ..数据库会按照一下顺序来解析:from .. on.. join ..whe原创 2020-07-10 12:02:39 · 153 阅读 · 0 评论 -
SQL语句优化原理
文章目录首先客户端发送sql语句,服务端的连接层收到语句将语句传递给服务层,服务层将语句进行优化再由引擎层决定由什么引擎执行,再将数据进行存储。MYSQL逻辑分层 :连接层 服务层 引擎层 存储层引擎层的默认引擎:InnoDB(默认) :事务优先 (适合高并发操作;行锁)MyISAM :性能优先 (表锁)查询数据库引擎: 支持哪些引擎 show engines ;查看当前使用的引擎:show variables like '%storage_engine%' ;指定数据库原创 2020-07-09 22:53:19 · 301 阅读 · 0 评论 -
LINUX安装mysql
文章目录MySQL的版本安装步骤服务启动关闭存放目录与配置文件详解字符编码设置MySQL的版本5.x:5.0-5.1:早期产品的延续,升级维护5.4 - 5.x : MySQL整合了三方公司的新存储引擎 (推荐5.5)安装步骤1、先把Mysql客户端服务端传到LINUX2、安装:rpm -ivh rpm软件名如果安装时 与某个软件 xxx冲突,则需要将冲突的软件卸载掉:yun -y remove xxx安装时 有日志提示我们可以修改密码:/usr/bin/mysqladm原创 2020-07-09 22:39:17 · 164 阅读 · 0 评论 -
Mysql服务消失解决
1、 开始->运行->cmd,进到mysql安装的bin目录 (cmd以管理员身份运行)D:\MySQL\bin> mysqld --install2、运行D:\MySQL\bin>mysqld -nt.exe -install3、启动服务D:\MySQL\bin>net start mysql原创 2020-05-26 10:22:21 · 337 阅读 · 0 评论 -
触发器(trigger)
触发器 Trigger创建触发器创建只有一个执行语句的触发器创建有多个执行语句的触发器NEW与OLD详解查看触发器三、删除触发器什么是触发器? 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。 触发器的特点: 1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:Input、Delete、Update 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。建议不原创 2020-05-21 18:07:04 · 8261 阅读 · 0 评论 -
视图、变量、存储过程、流程控制
TOP:视图变量视图一、含义mysql5.1版本出现的新特性,本身是一个虚拟表,它的数据来自于表,通过执行时动态生成。好处:1、简化sql语句2、提高了sql的重用性3、保护基表的数据,提高了安全性二、创建create view 视图名as查询语句;三、修改方式一:create or replace view 视图名as查询语句;方式二:alter view 视...原创 2020-04-06 21:46:14 · 234 阅读 · 1 评论 -
Mysql之TCL
TCL事务控制语句(Transaction Control Language)事务一、含义二、特点(ACID)三、事务的使用步骤 ★四、并发事务事务一、含义事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行要么都不执行二、特点(ACID)A 原子性:一个事务是不可再分割的整体,要么都执行要么都不执行C 一致性:一个事务可以使数据从一个一致状态切换到另外一个一致的状态...原创 2020-04-05 17:45:06 · 268 阅读 · 0 评论 -
Mysql之DDL
数据库模式定义语言DDL(Data Definition Language)库的管理一、创建库二、修改库三、删除库表的管理一、创建表 ★二、修改表三、删除表四、复制表数据类型一、数值型二、字符型三、日期型常见的约束一、常见的约束二、创建表时添加约束三、修改表时添加或删除约束四、自增长列库的管理一、创建库create database 【if not exists】 库名【 character...原创 2020-04-05 17:30:08 · 174 阅读 · 0 评论 -
Mysql之DML
数据操纵语言DML(Data Manipulation Language)插入一、方式一二、方式二修改一、修改单表的记录 ★二、修改多表的记录【补充】删除方式一:使用delete方式二:使用truncate插入一、方式一语法:insert into 表名(字段名,…) values(值,…);特点:1、要求值的类型和字段的类型要一致或兼容2、字段的个数和顺序不一定与原始表中的字段个数...原创 2020-04-05 16:49:38 · 134 阅读 · 0 评论 -
Mysql之DQL
DQL[Data Query Language]数据查询语言基础查询条件查询排序查询常见函数分组查询连接查询基础查询一、语法select 查询列表from 表名;二、特点1、查询列表可以是字段、常量、表达式、函数,也可以是多个2、查询结果是一个虚拟表三、示例1、查询单个字段select 字段名 from 表名;2、查询多个字段select 字段名,字段名 from 表名;...原创 2020-04-03 16:25:10 · 160 阅读 · 0 评论 -
初识MySQL
初识Mysql数据库相关概念一、数据库的好处二、数据库的常见概念 ★三、数据库存储数据的特点四、常见的数据库管理系统Mysql的介绍一、MySQL的背景二、MySQL的优点三、MySQL的安装四、MySQL服务的启动和停止五、MySQL服务的登录和退出数据库相关概念一、数据库的好处1、可以持久化数据到本地2、结构化查询二、数据库的常见概念 ★1、DB:数据库,存储数据的容器2、DBM...原创 2020-04-03 15:58:13 · 106 阅读 · 0 评论