MySQL数据库-优化
数据库系统优化是通过调整数据库结构、参数及应用程序以提升系统性能的技术,核心目标是将低效SQL语句转换为高效等效语句。人工智能自动优化技术通过重写SQL语句实现性能提升。优化技术演变历经三代工具:第一代解析执行计划,第二代推荐索引优化,第三代提出语法改进建议。优化策略贯穿数据库生命周期,其中设计阶段优化成本最低且收益最大。
原文链接:
MySQL高级篇——性能分析工具
【MySQL调优】如何进行MySQL调优?一篇文章就够了!
数据库服务器的优化步骤在数据库调优中,目标是响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
调优流程:
SHOW STATUS观察服务器状态,是否存在周期性波动;如果存在的话就缓存优化;
如果还存在不规则延迟或卡顿的话,就开启慢查询、explain分析查询语句;
如果发现sql等待时间长,就调优服务器参数;如果发现sql执行时间长,就索引优化、表优化;
如果还存在不规则延迟或卡顿的话,就观察sql查询是否到瓶颈了;是的话就读写分离、分库分表。
三种分析工具(SQL调优三步骤):慢查询、EXPLAN、SH ...
Redis
Redis(Remote Dictionary Server),远程字典服务,是用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,提供多种语言的API。Redis 是一个使用 C 语言开发的高速缓存数据库。Redis 的数据是保存在内存中的(内存数据库,支持持久化),因此读写速度非常快,被广泛应用于分布式缓存方向。并且,Redis 存储的是 KV 键值对数据。
参考原文:
Redis常见面试题总结上
Redis常见面试题总结下
Redis基础Redis 是一款完全开源免费、遵守BSD协议的高性能(NOSQL)的key-value数据库。它使用ANSI C语言编写,支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 功能及使用场景功能:数据缓存功能、分布式锁的功能、持久化机制、支持事务、支持消息队列、键过期、lua脚本(基于C语言,性能快)。
Redis的使用场景有如下一些:
读写效率要求高,需要将数据进行缓存的。此时,可以把一些需要频繁访问的数据,而且在短时间之内不会发生变化的,放入Redis中进行 ...
MySQL数据库-索引
索引是数据库中用来提高数据检索效率的数据结构。它类似于书籍的目录,可以帮助用户快速找到所需的数据,而不必扫描整个数据集。在数据库系统中,索引可以显著提高查询性能。
参考文章:
MySQL高级篇——性能分析工具
MySQL高级篇——覆盖索引、前缀索引、索引下推、SQL优化、主键设计
索引的分类与使用索引是满足某种特定查找算法的数据结构,而这些数据结构会以某种方式指向数据,从而实现高效查找数据。具体来说 MySQL 中的索引,不同的数据引擎实现有所不同,但目前主流的数据库引擎的索引都是 B+ 树实现的,B+ 树的搜索效率,可到达二分法的性能,找到数据区域之后就找到了完整的数据结构了,所有索引的性能也是更好的。
索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。
从功能逻辑上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。
按照物理实现方式,索引可以分为 2 种:聚簇索引和非聚簇索引。
按照作用字段个数进行划分,分成单列索引和联合索引。
普通索引在创建普通索引时,不附加任何限制条件,只是用于提高查询效率。这类索引可以创 ...
MySQL数据库-存储引擎和索引结构
MySQL数据库中,数据库引擎(Storage Engine)是用于控制数据存储、检索和操作的底层软件组件。每种存储引擎都提供了不同的数据存储机制、索引策略、锁定级别等特性。MySQL从版本5.5起,默认存储引擎是InnoDB,但在更早的版本中,MVISAM是默认存储引擎。
参考原文:
MySQL高级篇——存储引擎和索引
MySQL高级篇——MVCC多版本并发控制
存储引擎查看、设置存储引擎的命令1234567891011121314151617# 查看mysql提供什么存储引擎show engines;# 查看默认的存储引擎,两种方式show variables like '%storage_engine%';SELECT @@default_storage_engine;# 创建表时指定存储引擎CREATE TABLE 表名( 建表语句;) ENGINE = 存储引擎名称;# 例如,在创建表时指定使用InnoDB存储引擎CREATE TABLE example ( id INT AUTO_INCREMENT, name VARCHAR(10 ...
MySQL数据库-概述
数据库指的是以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。它具有整体性、共享性。数据库软件有着整体性和共享性的特点。
原文链接:JavaWeb基础1——MySQL
概念数据库(DataBase,DB):存储数据的仓库,数据是有组织的进行存储。数据库管理系统(DataBase Management System, DBMS):管理数据库的大型软件。SQL(Structured Query Language):结构化查询语言。操作关系型数据库的编程语言,定义操作所有关系型数据库的统一标准。
关系型数据库关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库。优点:
都是使用表结构,格式一致,易于维护
使用通用的 SQL语言操作,使用方便,可用于复杂查询
数据存储在磁盘中,安全
MySQL的数据库在mysql的data目录下
常用关系型数据库管理系统Oracle:收费的大型数据库,Oracle 公司的产品**MySQL**:开源免费的中小型数据库。后来 Sun公司收购了 MySQL,而 Su ...
反射
反射机制主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。适用于计算机科学领域关于应用反射性的研究。本文简单整理了一些关于反射的相关问题。
原文链接:全网最完整Java学习笔记
基本介绍反射:在程序运行期间动态地获取类的信息并对类进行操作的机制。在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
通过反射机制可以实现:
获取类或对象的Class对象:程序运行时,可以通过反射获得任意一个类的Class对象,并通过这个对象查看这个类的所有方法和属性(包括私有,私有需要给该字段调用setAccessible(true)方法开启私有权限)。注意类的class对象是运行时生成的,类的class字节码文件是编译时生成的。
创建实例:程序运行时,可以利用反射先创建类的Class对象再创 ...
锁
在 Java 多线程环境中,锁是确保共享资源线程安全的重要手段。
参考文章:
Java锁详解
全网最完整Java学习笔记
基本介绍什么是锁在 Java 多线程环境中,锁是确保共享资源线程安全的重要手段。 当线程要操作共享资源时,需先获取对应的锁,以此保证在操作过程中,该资源不会被其他线程访问。待操作结束后,线程释放锁,使其他线程有机会获取并操作该资源。
为什么需要锁锁可以确保多个线程之间对共享资源的访问是互斥的,也就是同一时刻只有一个线程能够访问被保护的共享资源,从而避免并发访问带来的数据不一致性和竞态条件等问题,是解决线程安全问题常用手段之一。
什么是死锁及如何防止死锁当线程 A 持有独占锁a,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁,而发生的阻塞现象,我们称为死锁。防止死锁有如下方式:
尽量使用 tryLock(long timeout, TimeUnit unit) 的方法 (ReentrantLock、ReentrantReadWriteLock),设置超时时间,超时可以退 ...
使用多线程解决问题
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。本文简单记录一些关于线程、多线程的问题。本文记录了关于一些常见多线程业务问题处理。
多线程问题 1问题:100个线程并发向1个银行账户中存入1元钱,并在全部完成后,打印银行账户的金额。
思路:创建100个线程(线程池);保证线程安全,同一时刻只有一个线程对账户进行操作(Lock 或者 synchronized)。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071// 第一种加锁 synchronizedpubl ...
多线程
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理” 。本文简单记录一些关于线程、多线程的问题。
参考文章:
多线程下如何保证事务的一致性、
Spring在多线程环境下如何确保事务一致性
详解Spring多线程下如何保证事务的一致性
全网最完整Java学习笔记
基本介绍并行和并发的区别并行:多个处理器或多核处理器同时处理多个任务。并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。
线程和进程的关系进程:是操作系统分配资源的基本单位,有独立的地址空间(内存空间的一部分,用于存储进程中的代码、数据和堆栈等信息)和内存空间,进程之间不能共享资源,上下文切换慢,并发低,能独立执行(有程序入口、执行序列、出口),更健壮(因为进程崩溃后 ...
JAVA I/O流
java.io是Java编程语言中处理输入输出(I/O)操作的核心类库,定义了数据流模型与多种接口,支持文件操作、网络通信及对象序列化等功能。其通过流(Stream)机制实现数据传输,涵盖字节流、字符流与缓冲处理等设计,为Java标准库的重要组成部分。
该库将数据源抽象为输入流和输出流,按传输方向分为输入型与输出型,按单位分为字节流(8位字节处理)与字符流(16位字符处理)。功能上包含直接操作设备的节点流和增强功能的过滤流,核心类包括InputStream、OutputStream、Reader、Writer四个抽象类及其子类,形成分层结构的I/O处理体系。
参考原文:全网最完整Java学习笔记
基本介绍什么是I/O流
I/O流(Input/Output Stream),即输入(Input)和输出(Output)流,是用于处理输入和输出操作的数据流。在Java中,一般用IO流写一个文件输出到操作系统中,或者从操作系统中输入一个文件进行读取。
IO流分类:
按数据流向:
输入流:读数据。
输出流:写数据。
按数据类型:
字节流:它处理单元为1个字节(byte),操作字节和字节数 ...





