
mysql & oracle & 数据库
文章平均质量分 78
mysql & oracle & 数据库
c&0xff00
纸上学来终觉浅
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
记一次Mysql大批量数据更新
背景因公司业务架构变更,需要对原有账户累计收益进行备份,削弱老业务对新业务的影响。而原有用户累计收益数据约为7000w,因为处于业务过渡阶段,所以希望以一种临时的手段去存储数据,最终讨论得出,在用户表新增一个字段old_balance来存储这个数据。大表加字段一开始以为加字段会锁表,使得线上服务不可用。但后来发现是不需要的。Mysql支持在增加列的过程中并发DML。Mysql5.6官方文档 https://dev.mysql.com/doc/refman/5.6/en/innodb-online原创 2021-11-04 19:31:08 · 3758 阅读 · 0 评论 -
springboot+mybatis-plus 数据表字段是关键字的问题解决
项目里有个数据表 yy_key_value, 字段有 key、value,保存一些基本参数数据。原来使用框架是 springmvc+mybatis,sql 语句写到 xml 文件里,包括基本的 DML 语句(这样不好。。),涉及到 key 字段时,加了 ``, 如下select key,value from yy_key_value where key=?这样是没问题的(key 是 mysql 里的关键字,直接写会报错)但最近项目升级,使用了 springboot+mybatis-plus 框架,可转载 2021-08-18 16:27:37 · 1747 阅读 · 0 评论 -
Mysql 定义字段括号中长度 int (3) 和 int (10) 有区别吗?
误区:括号中的数据表示类型的长度, 实际上括号中的长度与字段所占字节大小并没有关系。论证:论点1:括号中数字不是表示字段类型长度创建 student,student2 表分别定义一个 student,student2 表create table student(id int(3) not null primary key,name varchar(20));create table student2(id int(10) not null primary key,name varchar(20原创 2021-07-27 16:36:28 · 772 阅读 · 0 评论 -
Impossible WHERE noticed after reading const tables
阿里云反馈的慢 SQL,执行计划返回如下:Impossible WHERE noticed after reading const tablessql 很简单:SELECT * FROM deposit_transaction WHERE request_Id = 'XXX'而且该表的 request_id 创建了唯一索引:很明显,这个字段是保持幂等操作的,通过数据库的唯一索引实现;每次数据落地前,都要执行该 SQL 查询是否记录存在,而数据库做幂等兜底;如果 request_id转载 2021-05-11 09:41:06 · 225 阅读 · 0 评论 -
Innodb - buffer pool(5.7.21版本)
参考:MySQL 是怎样运行的MySQL 实战 45 讲前言缓存,在计算机科学中可以说是无处不在。缓存的存在,大大缓解了CPU、内存、磁盘,性能差距过大的问题。常见的缓存,如:CPU高速缓存 :提高了RAM(内存)的访问效率。操作系统IO缓存:提高了操作系统写入磁盘的效率。各类缓存系统:Redis、Memcached等,提高了数据库,磁盘的访问效率。今天我们要聊的是Innodb的buffer pool,相比于上述提到的缓存,其他的原理,目标都是一致的,那就是缓和不同硬件之间性能差距大的矛盾原创 2021-04-26 09:42:23 · 366 阅读 · 0 评论 -
MySQL ADD COLUMN 给表增加列 指定位置 AFTER FIRST
前言ALTER TABLE test ADD COLUMN id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY FIRST给表添加列是一个常用的操作,MySQL 增加列的时候可以指定此列的位置语法给指定位置加列需要两个关键字:FIRST 和 AFTERFIRST 表示增加此列为第一个列AFTER 表示增加在某个列之后注意 MySQL 增加列指定位置时没有 BEFORE 的用法,第一列可以使用 FIRST, 非第一列使用 AFTER。语法转载 2021-04-06 09:34:05 · 14718 阅读 · 1 评论 -
optimizer trace 查看Mysql如何选择执行计划的过程
前面几篇讲了Mysql基于成本的优化,也看了执行计划,今天我们来看看Mysql提供的更详细的执行计划生成过程。optimizer traceoptimizer trace由来:optimizer trace的使用方式:optimizer trace实践:小结optimizer trace由来:1、我们平时查看SQL的执行计划,但是执行计划是相对粗略的,只告诉你使用了什么索引,采用了什么方式。但是没有告诉你它为什么选择这种查询方式。2、所以,在MySQL 5.6之后,提供了个optimizer tra原创 2021-03-19 12:21:25 · 843 阅读 · 0 评论 -
Mysql 查询优化器有哪些优化手段?
当我们往黑窗口输入一条SQL给Mysql执行,Mysql 查询优化器会按照一定的规则帮我们对SQL进行重写,优化,本文将会讲解:Mysql基于规则的优化条件化简:常量表检测外连接消除子查询不相关标量子查询标量相关子查询IN子查询优化临时表半连接的实现方法半连接的使用条件:小结条件化简:条件化简就是我们平时很常见的消除一些冗余的条件,如:移除不必要的括号常量传递比如:a = 5 AND b > a可以转换为a = 5 AND b > 5等值传递比如:a = b and b = c原创 2021-03-16 14:51:32 · 662 阅读 · 0 评论 -
Innodb统计信息是如何收集的
如果你对mysql中Innodb的统计信息感兴趣,那么请你继续看下去,本文将会讲解:Innodb统计信息不同的统计信息存储方式如何查看统计信息定期更新统计信息innodb_stats_method 的使用小结不同的统计信息存储方式Innodb统计信息存储方式主要分为两种:1、永久性的统计数据(统计数据存储在磁盘上)2、非永久性的统计数据(统计数据存储在内存中)我们知道,Innodb收集与存储统计信息是以表为单位的,可通过innodb_stats_persistent来修改表的统计信息是存在磁盘上原创 2021-03-15 16:03:20 · 302 阅读 · 1 评论 -
Mysql基于成本的优化(一条查询语句是如何选择执行计划的)[文末有问题]
如果你对mysql如何生成执行计划,如何选择走哪个索引这类问题比较感兴趣的话,请你继续看下去:本文将会讲解:mysql查询会有哪些成本?mysql执行计划生成的步骤?mysql查询会有哪些成本?我们知道,mysql的数据和索引是存储在磁盘上的,我们查询数据是,需要将数据页从磁盘上读出,这里就是IO成本。数据或索引读出后,需要检测记录是否满足对应的搜索条件(where条件)、对结果集进行排序等,这里就涉及到CPU成本。所以,在考虑mysql查询时,我们主要考虑的是IO成本与CPU成本。一般我原创 2021-03-12 17:32:38 · 534 阅读 · 1 评论 -
mysql索引访问方式实践 (const、ref、range、index、all、index merge)
如果你对mysql索引访问方式还一知半解,请继续看下去,相信本文会对你有帮助:本文会讲解:mysql索引的实现方式mysql有哪些索引访问方式mysql索引的实现方式Mysql索引的数据结构采用的是B+树,B+树是一棵多路搜索树。类似这样。在Innodb存储引擎中,又可分为聚簇索引(主键索引)与非聚簇索引,聚簇索引的非叶子结点记录的是索引,叶子结点记录了对应的数据行。非聚簇索引与聚簇索引不一样的是,它的叶子结点记录的是普通索引列与主键的对应关系。而在Myisam存储引擎中,就全是非聚簇原创 2021-03-11 11:06:02 · 19512 阅读 · 3 评论 -
记一次mysql中文乱码问题,druid连接池+mysql8.0
前言乱码问题主要是字符编码不配对引起的,也就是编码和解码的字符集不一致,就造成了乱码。mysql的字符集编码可以参考:mysql字符集与比较规则乱码问题:讲讲我的解决思路1、一开始看到这个问题,首先我先看了该schema下的字符集:show variables like '%char%';都正常,为utf8mb4。主要关注的是character_set_client、character_set_connection、character_set_results这三个变量。他们的含义可以看以原创 2021-01-04 19:36:40 · 2368 阅读 · 4 评论 -
3、mysql字符集与比较规则
mysql字符集与比较规则概念介绍字符编解码常见的编码格式介绍比较规则mysql的字符集与比较规则mysql有哪些维度的字符集一次sql查询经历了怎样的编解码过程,由哪些参数决定比较规则举例自定义字符集与比较规则的sql概念介绍字符编解码我们知道不管是计算机存储还是网络上传输数据,其中传输的都是0101的二进制流。所以我们平时在网上收发消息,电脑上保存文本最终都是以二进制流的形式展现。在这个过程中,我们以小明要给小红发送一个字符串为例,小明在对话框中输入一句话,需要经过聊天软件进行编码成二进制流,通原创 2020-12-20 16:39:33 · 407 阅读 · 0 评论 -
2、mysql的启动选项和配置文件介绍
百因必有果mysql服务端可以指定允许同时接入的客户端数量max-connections、客户端与服务器的通信方式、表的默认存储引擎default_storage_engine等等设置项,使得我们可以更加灵活地使用它。进入正题我们讲的是基于linux系统的,本文我们主要讲一下:1、有哪些常用的启动选择配置方式?2、采用配置文件 配置启动选项有哪些注意点?配置文件的优先级?3、如何查看和设置系统变量?> 有哪些常用的启动选择配置方式?1、命令行配置如:mysqld --skip-ne原创 2020-12-18 17:13:02 · 585 阅读 · 1 评论 -
1、mysql服务器处理客户端请求
实现效果客户端进程向服务端进程发送一段文本(sql语句),服务端进程处理后再向客户端返回一段文本(处理结果)。借鉴大佬的一张图:连接管理我们讲的服务器就是一个mysql服务器进程,一个进程占用一个端口号(mysql默认端口为3306),服务器会在3306端口监听客户端的连接。当客户端通过mysql -h 127.0.0.1 -u root -p进行连接服务器的时候,如果认证通过,服务器就会为客户端分配一个线程,处理该客户端的请求。当客户端断开连接的时候,服务器不会将连接的线程直接销毁,而是原创 2020-12-17 14:14:39 · 401 阅读 · 0 评论 -
Oracle AWR报告的生成和分析
一、是什么:AWR (Automatic Workload Repository) 是自动负载信息库的英文缩写,AWR报告是Oracle 10g以后版本提供的一种性能收集和分析工具,能提供一个时间段内整个系统资源使用情况的报告,通过报告可以了解一个系统的整个运行情况,生成的报告包括多个部分。AWR每小时对vactivesessionhistory视图(内存中的ASH采集信息,理论为1小时)进行采样一次,并将信息保存到磁盘中,并且保留7天,7天后旧的记录才会被覆盖。这些采样信息被保存在wrhactive_s原创 2020-11-12 19:11:59 · 2393 阅读 · 0 评论 -
oracle 使用IN 不能超过1000问题的解决
项目中使用到了Oracle中where 语句中的in条件查询语句。in(,,,,,,),括号内的数据个数比较多(此处是区域查询的情况),北京市下属有7000多个区、街道、社区。解决此问题有几个途径1、编写一个方法将条件更换成 in(,) or in (,) or in (,)…保证每个in内部的数据个数不超过一千,就可以。问题是这么处理的时候执行效率比较低下。首先的查询出那么多的条件数值,然后在in 查询中有了那么的or 条件。。。2、建立一个中间的temp表存在查询条件,在数据库内部进行直接查询转载 2020-09-17 14:33:30 · 1986 阅读 · 0 评论 -
如何设计一个关系型数据库
存储管理逻辑数据和物理存储的映射。缓存机制加载的块缓存SQL解析日志管理权限划分容灾机制索引管理(重要)为什么要使用索引?在搜索数据量较大的表,避免全表扫描,减少IO访问量。什么样的信息能称为索引?如唯一键或有一定区分度的数据字段索引的数据结构1、二叉查找树删除或新增之后,容易退化,树的深度会很大,io次数无法得到优化2、B树结点必须存储真实数据,每个页存储的数据量较少,查询IO数较B+树大。3、B+树非叶子结点只存储索引,不存储数据,只有叶子结点存储数据原创 2020-09-15 16:08:16 · 896 阅读 · 0 评论 -
Oracle分区表实践
分区裁剪的定义分区表的实质是采用化整为零的思想,将一个大对象划分为若干个小的对象。当数据的访问,被限定在几个较小的对象,甚至只发生在1个小对象上时,这时所访问的数据量,只是原来的几分之一,几十分之一、几百分之一,甚至更少。其性能较未分区时,会得到极大的提升。当发生这种情况时,我们称之为分区裁剪(或分区消除)。实验论证分别创建分区表和普通表假设该表是用于存储学生信息的,其上共有四列:第一列stu_year,表示学生的入学年份;第二列stu_no,表示学号(5位序号),每年的新生都从00001开始;转载 2020-09-10 16:28:02 · 372 阅读 · 0 评论 -
不是所有针对索引列的查询都能用上索引
是不是建了索引一定可以用上?并不是1、索引只能匹配列前缀SELECT * FROM person WHERE NAME LIKE '%name123' LIMIT 100因为索引只能前缀匹配,像这样的like 匹配后缀,name列的索引是不生效的。2、设计函数操作无法走索引SELECT * FROM person WHERE LENGTH(NAME)=7建立的索引是name列,但搜索条件用到了Length函数,无法走索引。因为索引保存的是索引列的原始值,如果需要针对函数走数据库索引原创 2020-09-03 08:51:41 · 458 阅读 · 0 评论 -
聚簇索引和二级索引
前言前面提到的Innodb的页目录就是聚簇索引的一部分,但当有无数个页的数据,页目录无法降低查询的复杂度,所以引入了更加合适的索引:https://blog.csdn.net/weixin_37968613/article/details/108354971采用B+树建立索引常见的InnoDb就采用B+树建立聚簇索引和二级索引。B+树的特点:最底层叶子节点,存放数据。Innodb...原创 2020-09-03 08:33:34 · 1084 阅读 · 0 评论 -
InnoDB 是如何存储数据的?
Mysql支持InnoDbMySQL 支持多种存储引擎,并且可以以表为粒度设置存储引擎。因为支持事务,我们最常使用的是 InnoDB。InnoDb采用页保存数据,页大小一般是16KB虽然数据保存在磁盘中,但其处理是在内存中进行的。为了减少磁盘随机读取次数,InnoDB 采用页而不是行的粒度来保存数据,即数据被分成若干页,以页为单位保存在磁盘中。InnoDB 的页大小,一般是 16KB。页与页之间是双向链表,每个页中的数据按主键排序组成单向链表从图中我们可以看到,每个页还有一个页目录,方便按照主键原创 2020-09-02 08:56:06 · 1139 阅读 · 0 评论 -
update语句的返回值是什么
执行一条update语句,执行成功后返回值是 1 ,所以就理所当然的认为返回的是受影响的行数,但是当你再次执行这条update语句时,按正常的逻辑,数据已存在,更新不会成功,应当返回 0,但是返回值依旧是 1 (已测试过),所以返回值并不是受影响的行数,查看别人的文章,得知返回值是matched记录数(匹配到的行数)如果想设置返回值是受影响的行数,修改数据库链接配置:增加 useAffectedRows=true 即可数据库链接配置为:jdbc.driver=com.mysql.jdbc转载 2020-08-21 12:18:21 · 6551 阅读 · 0 评论 -
hibernate中联合主键要同时重写hashCode()和equals()方法
关于联合主键联合主键为什么要重写equals方法和hashCode方法,是为了保证唯一性1、在数据库保证唯一性是使用的联合主键2、把一系列的对象放到内存的时候,为了区分同名对象,数据库是使用联合主键来区分,内存中也是用相应的方式来区分,所以重写equals和hashCode方法,而且,逻辑不能乱写,hashCode不能使用父类里面的,否则两个同样的对象就视为同一对象,在equals方法中,从内存的角度讲, 只有联合主键中的每一个都相同,才叫相同,才应该返回true@Overridepublic b转载 2020-08-21 11:21:32 · 307 阅读 · 0 评论 -
UPDATE语句中后面SET的值,可以使用前面set的值吗,赋值的先后顺序有影响么?
昨天研发同事问我个问题,UPDATE语句中SET部分列赋值的先后顺序会影响结果么?以前没考虑过这个问题,因为通常我们都会UPDATE时给列赋予一个确定的值,而不是一个依赖于其他列的值。测试环境:DROP TABLE TB1001;CREATE TABLE TB1001( ID INT PRIMARY KEY, C1 INT, C2 INT);INSERT INTO TB1001 ( ID, C1, C2 )SELECT 1,1,1UNIO.转载 2020-08-14 13:55:28 · 1676 阅读 · 0 评论 -
ORACLE 在同等长度下,Number类型比VARCHAR2类型占用空间小
1.建立测试表2.插入测试数据3.执行sqlselect dump(COLUMN_NUMBER), lengthb(COLUMN_VARCHAR2), lengthb(COLUMN_VARCHAR)from TEST ORDER BY COLUMN_NUMBER由结果可见,当数字类型长度>3时,采用number类型存储占用的空间相对VARCHAR2是要小的。当然,number类型的大小是有限制的,最长为NUMBER(38);...原创 2020-08-03 12:43:44 · 1000 阅读 · 0 评论 -
Oracle对于多个大表关联操作如何优化速度?
首先要建立适当的索引。sql在索引字段不要加函数,保证索引起效。如果是复合索引注意在sql的顺序。如果已经存在索引,建议你先重建索引先,因为大数据表的索引维护到了一个阶段就是乱的,一般建议重建。建立好的一般可以获得几十倍的速度提升。 最大数据量的表放在最前,最小的表放在最后面。sql是从最后面开始反向解析的。 其次是要把最有效缩小范围的条件放到sql末尾去。尤其是主键或者索引字段的条件。 保...转载 2019-12-27 10:24:54 · 4493 阅读 · 0 评论 -
Oracle中的substr()函数 详解及应用
1、substr函数格式 (俗称:字符截取函数) 格式1: substr(string string, int a, int b); 格式2:substr(string string, int a) ;解释: 格式1: 1、string 需要截取的字符串 2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)...转载 2019-12-20 14:58:29 · 507 阅读 · 0 评论 -
Oracle中的instr()函数 详解及应用
1、instr()函数的格式 (俗称:字符查找函数)格式一:instr( string1, string2 ) // instr(源字符串, 目标字符串)格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) // instr(源字符串, 目标字符串, 起始位置, 匹配序号)解析:strin...转载 2019-12-20 14:57:32 · 285 阅读 · 0 评论 -
oracle中存储过程结束的斜杠(/)的含义
斜杠就是让服务器执行前面所写的sql脚本。如果是普通的select语句,一个分号,就可以执行了。但是如果是存储过程,那么遇到分号,就不能马上执行了。这个时候,就需要通过斜杠(/)来执行。setserveroutput on;begindbms_output.put_line('Hello World!');end;/执行运行结果:Hello Worl...转载 2019-12-20 10:19:05 · 7306 阅读 · 0 评论 -
sql优化--in和exists效率
in 和existsin是把外表和内表作hash join连接,而exists 是对外表作nested loop 循环,每次loop 循环再对内表进行查询。一直以来认为exists 比in 效率高的说法是不准确的。如果查询的两个表大小相当,那么用in 和exists 差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(...转载 2019-12-02 16:20:07 · 939 阅读 · 0 评论 -
索引无法应用的情况,隐式类型转换,隐式字符编码转换
索引无法应用的情况条件字段函数操作select count(*) from test where month(modified)=7;如果对字段做了函数计算,就用不上索引了,这是 MySQL 的规定。对索引字段做函数操作,可能会破坏索引值的有序性,因此优化器就决定放弃走树搜索功能。MySQL 无法再使用索引快速定位功能,而只能使用全索引扫描。隐式类型转换select...转载 2019-11-15 10:39:35 · 334 阅读 · 0 评论 -
Oracle 中 || 的作用
连接符的作用,类似于concat如TEST表:执行:select t.ID || t.NAME from TEST t;结果:执行:select concat(t.ID,t.NAME) from TEST t;结果:原创 2019-09-19 09:18:46 · 610 阅读 · 0 评论 -
PL/SQL ORACEL数据库导入导出
本文主要介绍如何结合Sql脚本和PL/SQL Developer工具来实现创建表空间、创建数据库、备份数据库、数据导出等操作,然后实现Oracle对象创建、导入数据等操作,方便我们快速了解、创建所需要的部署Sql脚本和数据库操作。1、 准备数据库创建脚本[sql]createtablespacewhc_tbsdatafile'E:\oracle\oradata\whcdb\w...转载 2019-07-23 10:15:55 · 360 阅读 · 0 评论 -
DDL/DML/DCL区别概述
DDLDDL的概述DDL(Data Definition Language 数据定义语言)用于操作对象和对象的属性,这种对象包括数据库本身,以及数据库对象,像:表、视图等等,DDL对这些对象和属性的管理和定义具体表现在Create、Drop和Alter上。特别注意:DDL操作的“对象”的概念,”对象“包括对象及对象的属性,而且对象最小也比记录大个层次。以表举例:Create创建数据表,Al...翻译 2019-07-01 19:10:57 · 151 阅读 · 0 评论 -
Oracle sql语句摘记
1.统计多组数据,各组数据中包含相同列的情况select 统计列 from (select ...)A left join (select ...) B on A.相同列 = B.相同列;如果还有数据后面继续 join即可2.分组统计select row_number over(partition by 分组列 order by 排序列 desc/asc)whe...原创 2019-06-28 18:43:31 · 222 阅读 · 0 评论 -
【转】Oracle数据库中Sequence的用法
在Oracle数据库中,sequence等同于序列号,每次取的时候sequence会自动增加,一般会作用于需要按序列号排序的地方。 1、Create Sequence (注释:你需要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限) CREATE SEQUENCE emp_sequence INCREMENT BY 1 —— 每次加几个 S...转载 2019-01-10 14:23:56 · 260 阅读 · 0 评论 -
聊聊基于数据库的策略模式
策略模式概述:在我看来最主要的是使用策略的代码是固定的,但策略是可以自由选择的。这就使得对策略的选择和使用进行了解耦。策略模式:https://blog.csdn.net/weixin_37968613/article/details/103068487基于数据库进行对策略进行选择:举个例子:我们现在有一个场景,业务中需要用到很多配置码表信息(上百张配置表),诸如:good...原创 2020-02-28 12:09:20 · 826 阅读 · 0 评论 -
Oracle权限管理详解
Oracle 权限权限允许用户访问属于其它用户的对象或执行程序,ORACLE系统提供三种权限:Object 对象级、System 系统级、Role 角色级。这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户"Public"(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。对管理权限而言,角色是...转载 2020-02-21 10:29:50 · 557 阅读 · 0 评论 -
PL/SQL简单使用——导入、导出数据表
1、使用PL/SQL导出、导入表在使用PL/SQL操作oracle数据库时,经常使用的一个操作就是将自己写的数据表导出,或者想把他人的数据表导入到自己的数据库中。虽然是很简单的操作,但自己之前一直出错,所以在这里记录一下使用方法。1.1.导出数据表在PL/SQL中可以选择导出表结构或者只导出数据或者同时导出数据结构和数据。接下来将一一解说。1.1.1.导出数据表结构流程: To...原创 2020-02-21 09:52:19 · 1359 阅读 · 0 评论