![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据库--日常问题
soliderzzz
沉迷学习,不能自拔,strategic FooYou Agent
展开
-
索引失效的情况
索引失效没有查询条件,或者查询条件没有建立索引在查询条件上没有使用引导列查询的数量是大表的大部分,应该是30%以上。索引本身失效查询条件使用函数在索引列上(见12)对小表查询提示不使用索引统计数据不真实CBO计算走索引花费过大的情况。其实也包含了上面的情况,这里指的是表占有的block要比索引小。10)隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给转载 2022-03-01 11:46:11 · 284 阅读 · 0 评论 -
IO密集型/CPU密集型任务
1.1、IO密集型任务一般来说:文件读写、DB读写、网络请求等1.2、CPU密集型任务一般来说:计算型代码、Bitmap转换、Gson转换等转载 2021-09-11 15:48:12 · 776 阅读 · 0 评论 -
postgreSQL数据库limit分页、排序
postgreSQL数据库limit分页、排序语法:select*frompersonslimitAoffsetB;解释:A就是你需要多少行;B就是查询的起点位置。示例:select*frompersonslimit5offset0;意思是,起点0开始查询,返回5条数据。select*frompersonslimit5offset5;意思是,起点5开始查询,返回5条数据。...转载 2020-10-04 15:27:30 · 1183 阅读 · 0 评论 -
oracle中merge into用法解析
merge into的形式: MERGEINTO [target-table] AUSING [source-tablesql] BON([conditional expression]and [...]...) WHENMATCHEDTHEN [UPDATEsql] WHENNOTMATCHEDTHEN [INSERTsql] 作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,...转载 2020-10-02 11:50:23 · 1109 阅读 · 0 评论 -
Oracle 存储过程包(Package、Package Body)
初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试!好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。使用数据库:Oracle数据库工具:PL/SQL Developer在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子: 1 2 3 4 5 6 7 8 9转载 2020-09-20 14:31:55 · 2934 阅读 · 0 评论 -
postgresql中的序列nextval
一、postgresql中的序列1.1 场景需求需要向下图一样,需要对产品编码编码设置一个序列。编码规则SKU + 序列号:1.2 序列序列是基于bigint算法的,因此范围是不能超过一个八字节 整数的范围(-9223372036854775808 到 9223372036854775807)。由于nextval和setval调用绝不会回滚, 如果需要序数的"无间隙"分配,则不能使用序列对象。可以 通过在一个只包含一个计数器的表上使用排他锁来构建无间隙的分配, 但是这种方案比序列对象开.转载 2020-09-20 13:51:51 · 1878 阅读 · 0 评论 -
postgresql行转列
问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据?答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法写法1group by + sum + case whenselect name,sum(case when zbfm='年龄' then value else 0 end) as 年龄,sum(case when zbfm='身高' then value else 0 end) as ...转载 2020-09-20 13:31:18 · 2642 阅读 · 2 评论 -
oracle的nvl和nvl2是什么函数
NVL2(expr1,expr2,expr3) 功能:如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。...转载 2020-07-11 16:10:06 · 261 阅读 · 0 评论 -
JAVA调用存储过程--传入集合参数
在写存储过程中经常会遇到把java中的arrayList转化为Oracle中数组,(arrayList中存的是一些java对象)简单总结一下.例:arrayList中存在一些people对象。1.首先要在数据库中建立相应的JAVA对象和数组CREATE TYPE peopleOracleObject AS OBJECT ( peopleOracleID NUMBER(8) , nameOracle varchar(50) , ageOracle N..转载 2020-07-11 15:31:02 · 1460 阅读 · 1 评论 -
MySQL INSERT插入条件判断:如果不存在则插入
我们经常需要进行sql的批量插入,要求:该条记录不存在则插入,存在则不插入。如果使用一条INSERT语句实现呢?对于普通的 INSERT 插入,如果想要保证不插入重复记录,我们只有对某个字段创建唯一约束实现;那有没有不创建唯一约束,仅通过 INSERT INTO 一条语句实现的方案呢?答:使用 INSERT INTO IF EXISTS, 具体语法如下INSERT INTO table(field1, field2, fieldn)SELECT 'field1', 'field2',.转载 2020-07-11 15:27:57 · 5019 阅读 · 0 评论 -
Mysql:如果数据存在则更新,不存在则插入
文章目录ON DUPLICATE KEY UPDATE 语法: 特点 REPLACE INTO 语法: 语句1:不存在则插入 语句2:存在则先删除后插入 特点 REPLACE 语法 参考DUPLICATE、REPLACE INTO、REPLACE三种方式如何更新数据?ON DUPLICATE KEY UPDATEmysql语法支持如果数据存在则更新,不存在则插入,首先判断数据存在还是不存在的那个字段要设置成unique索引。1语法:INSE.转载 2020-07-11 15:24:43 · 5108 阅读 · 0 评论 -
MySQL中order by语句对null字段的排序
默认情况下,MySQL将null算作最小值。如果想要手动指定null的顺序,可以使用: 1.将null强制放在最前: if(isnull(字段名),0,1) asc //asc可以省略 2.将null强制放在最后 if(isnull(字段名),0,1) dsc if(isnull(字段名),1,0) asc //asc可以省略对于这种使用方式的理解: 以if(isnull(字段名),0,1)为例,它的意思是将该字段根...转载 2020-07-11 16:10:18 · 418 阅读 · 0 评论 -
mysql 数据库的group_concat()使用方法
1.使用条件查询 查询部门为20的员工列表-- 查询部门为20的员工列表SELECT t.DEPTNO,t.ENAME FROM EMP t where t.DEPTNO = '20' ;效果:2.使用 group_concat() 将多行合并成一行(比较常用)语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )SELECT T.DEPTNO, gro...转载 2020-07-05 15:55:24 · 684 阅读 · 0 评论 -
oracle的 listagg() WITHIN GROUP () 行转列函数的使用
1.使用条件查询 查询部门为20的员工列表-- 查询部门为20的员工列表SELECT t.DEPTNO,t.ENAME FROM SCOTT.EMP t where t.DEPTNO = '20' ;效果:2.使用 listagg() WITHIN GROUP () 将多行合并成一行(比较常用)SELECT T .DEPTNO, listagg (T .ENAME, ',') WITHIN GROUP (ORDER BY T .ENAME) namesFROM...转载 2020-07-05 15:52:56 · 345 阅读 · 0 评论 -
oracle索引分类
在关系数据库中,每一行都由一个行唯一标识RowID。RowID包括该行所在的文件、在文件中的块数和块中的行号。索引中包含一个索引条目,每一个索引条目都有一个键值和一个RowID,其中键值可以是一列或者多列的组合。 (一)索引按存储方法分类,可以分为2类:B*树索引和位图索引。 (1)B*树索引的存储结构类似书的索引结构,有分支和叶两种类型的存储数据块,分支块相当于书的大目录,叶块相当于索引...转载 2019-12-04 14:06:01 · 1200 阅读 · 0 评论 -
Oracle索引分区
索引分区:可以将索引存储在不同的分区中与分区有关的索引有三种类型:局部分区索引 - 在分区表上创建的索引,在每个表分区上创建独立的索引,索引的分区范围与表一致 (按照表分区对索引进行分区)create index ind1 on stu(sno) local ;全局分区索引 - 在分区表或非分区表上创建的索引,索引单独指定分区的范围,与表的分区范围或是否分区无关*create ind...转载 2019-12-04 14:01:52 · 332 阅读 · 0 评论 -
oracle数据库字典
一、Oracle数据字典 数据字典是oracle存放有关数据库信息的地方,其用途是用来描述数据的。比如一个表的创建者信息,创建时间信息,所属表空间信息,用户访问权限信息等。当用户在对数据库中的数据进行操作时遇到困难就可以访问数据字典来查看详细的信息。 Oracle中的数据字典有静态和动态之分。静态数据字典主要是在用户访问数据字典时不会发生改变的,但动态数据字典是依赖数据库运行的性能的,...转载 2019-12-04 13:38:19 · 183 阅读 · 0 评论 -
oracle 包,包调用 及好处
在oracle数据库中,package包如同java中package中的作用大致类似;可以把一些过程和函数组织到一起,把PL/SQL代码模块化,构建其他人员重用的代码,在oracle中,包里面可以写存储过程,写方法,写sql语句,定义一个结构体等等。包有包头和包体,包头和包体的名称要相同在包的内部,过程和函数可以被重载,也就是说,可以存在多个名称相同的,但是参数不同的过程和函数。重载允许相同...原创 2019-12-03 16:51:28 · 1348 阅读 · 0 评论 -
Oracle优化器
一Oracle优化器概述Oracle优化器是用于生成SQL语句访问数据库时使用的执行计划的。Oracle优化器通过使用Oracle搜集的关于数据库对象的统计数据来生成SQL语句的访问计划(使用什么对象)并执行计划(使用何种操作)。二 Oracle优化器的分类Oracle优化器分为三类:1) RULE优化器:基于规则的优化器相对比较简单,通过检查数据库的可用路径并将这些路径与路径表进行...原创 2019-12-03 16:40:10 · 775 阅读 · 0 评论 -
Oracle变量声明
变量声明的基本语法name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT default_assignment]name为要声明的变量或常量的名字;CONSTANT声明的是一个常量,如果没有,则声明的是一个变量;datayepe是可以赋值给这个变量的数据类型或者子类型;not null如果没有为这个变量赋值,数据库就会抛出一个异常;de...转载 2019-12-03 15:38:10 · 973 阅读 · 0 评论 -
锚定声明
锚定声明告诉PL/SQL按照已经定义好的数据结构来设置变量的数据类型。这些定义好的数据类型可能是:另一个PL/SQL变量、一个预定义的TYPE或者SUBTYP、一个数据库表或者表中的一列。有两种锚定:标量锚定:利用%TYPE属性,可以根据某个表中的一列或者其他的PL/SQL标量变量来定义变量类型;name type_attribute%TYPE [option default val...转载 2019-12-03 15:37:32 · 287 阅读 · 0 评论 -
oracle中条件运算符
--nvl相当于java中的条件运算符 a?b:c第一个参数为空,则返回值是第二个参数,如果第一个参数不为空,则返回值是第一个参数--查询所有员工的姓名,职位,薪水,提成和总工资select ename,job,sal,comm,sal+comm income from emp;select ename,job,sal,nvl(comm,o) comm,sal+nvl(com...原创 2019-12-03 15:07:05 · 394 阅读 · 0 评论 -
oracle数据类型
oracle数据类型的分类1.字符串类型:varchar,varchar2,string子类型2.数值类型:number,pls_integer,binary_integer,simple_integer,binary_float,binary_double,simple_float,binary_double,数字子类型3.日期和时间戳:datetime4.其他数据类型:bole...原创 2019-12-03 15:07:14 · 209 阅读 · 0 评论 -
CAP 理论十二年回顾:"规则"变了
CAP 理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显式处理分区情形,系统设计师可以做到优化数据一致性和可用性,进而取得三者之间的平衡。自打引入 CAP 理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度。NoSQL 运动也将 CAP 理论当作对抗传统关系型数据库的依据。CAP 理...转载 2020-03-11 15:40:46 · 358 阅读 · 0 评论 -
mysql读写分离原理是什么
MySQL 复制的基本过程如下:1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 M...转载 2019-11-27 20:22:41 · 131 阅读 · 0 评论 -
java实现数据库读写分离
数据库配置为一个主库 多个从库 主库用于写操作 从库只读操作读写分离实现即为配置两个数据源,一个用于读写 连接主库 假设为ds_wr,一个用于只读 连接从库 假设为ds_r。对数据库读操作时,操作ds_r数据源。对数据源写操作时,操作ds_wr数据源。读写分离可以有两种实现方式第一种为写两套mapppermapper写两套 一套用于读写 一套用于只读 ** &l...转载 2019-11-27 20:13:10 · 427 阅读 · 0 评论 -
数据库的垂直切分与水平切分
1. 为什么要拆分数据库? 单体项目在构建之初,数据库的负载和数据量都不大,所以不需要对数据库做拆分,小型财务系统、文书系统、ERP系统、OA系统,用一个MySQL数据库实例基本就够用了。 就像《淘宝技术这十年》里面说到的,电商业务的数据量增长飞快,所以最开始的PHP+MySQL的架构已经不能满足实际要求了,于是淘宝想到的第一个办法就是把MySQL替换成Oracle。但是没过了多久,在...转载 2019-11-27 20:00:08 · 339 阅读 · 0 评论 -
oracle触发器的类型
执行的语言分类 DML触发器DDL触发器数据库事件触发器INSTEAD OF触发器AFTER SUSPEND触发器管理触发器 执行的时间顺序分类 BEFORE触发器AFTER触发器语句级别触发器行级别触发器--创建触发器的语句create [ or replace] trigger trigger_name{before | afte...原创 2019-11-07 12:34:55 · 356 阅读 · 0 评论 -
Oracle中执行存储过程call和exec区别
在sqlplus中这两种方法都可以使用:exec pro_name(参数1..); call pro_name(参数1..);区别:1. 但是exec是sqlplus命令,只能在sqlplus中使用;call为SQL命令,没有限制.2. 存储过程没有参数时,exec可以直接跟过程名(可以省略()),但call则必须带上(). Sql代码SQL> --创建过程 插入数...转载 2019-11-03 14:41:35 · 297 阅读 · 0 评论 -
Oracle round函数是什么意思?怎么运用?
Oracle Round 函数的意思是四舍五入的方法,即传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果。Oracle Round 函数使用示例如下:SELECT ROUND( number, [ decimal_places ] ) FROM DUAL1、参数number 是指需要处理的数值,是必须填写的值。2、参数 decimal_places 是指在进行四舍...原创 2019-11-03 14:40:40 · 2684 阅读 · 0 评论 -
Oracle中decode()的使用技巧
decode (expression, search_1, result_1) 如果 expression结果=search_1结果,则返回result_1 decode (expression, search_1, result_1, search_2, result_2) decode (expression, search_1, result_1, search_2, re...转载 2019-11-03 14:38:07 · 141 阅读 · 0 评论 -
dbms_session(会话)
/* 该包提供了使用pl/sql实现alter session命令,set role 命令,和其他会话的方法;*/– 1,set_identifier /* 该过程用于设置会话客户的id号; */ dbms_session.set_identifier(client_id => );– 2,set_context /* 该过程设置...转载 2019-11-03 15:24:28 · 1370 阅读 · 0 评论 -
Oracle中with as的用法
一、简介with..as关键字,是以‘with’关键字开头的sql语句,在实际工作中,我们经常会遇到同一个查询sql会同时查询多个相同的结果集,即sql一模一样,这时候我们可以将这些相同的sql抽取出来,使用with..as定义。with..as相当于一张中间表,可以简单理解为sql片段(类似java复用代码)。下面我们通过两个简单的示例说明with..as的使用方法。二、使用方法...转载 2019-11-03 14:29:38 · 26957 阅读 · 0 评论 -
数据库连接池处理并发,事务,配置以及维护
本节内容紧接着上篇的数据库连接池原理分析,继续讲解连接池需要考虑的其他重要问题1、并发问题为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为java语言自身提供了对并发管理的支持,使用synchronized关键字即可确保线程是同步的,安全的。直接在类方法加上synchronized关键字,如:public syn...转载 2019-10-31 15:04:13 · 854 阅读 · 0 评论 -
数据库连接池原理以及好处
本篇内容综合广大网友提供内容,笔者经过整理,对数据库连接池原理和实现过程做个很系统的并且通俗易懂的分析讲解,以及手写一个连接池实现过程作为演示。一、早期通过JDBC方式操作数据库我们先来看早期使用JDBC的方式操作数据库的过程,这里以mysql数据库为例讲解JDBC操作数据库原理:一般来说,java应用程序访问数据库的过程是: ①装载数据库驱动程序; ②通过jdbc建立...转载 2019-10-31 15:02:45 · 1045 阅读 · 0 评论 -
数据库连接池种类及性能
现在很多Web服务器(Weblogic, WebSphere, Tomcat)都提供了DataSoruce的实现,即连接池的实现。通常我们把DataSource的实现,按其英文含义称之为数据源,数据源中都包含了数据库连接池的实现。开源数据库连接池:1 dbcpdbcp可能是使用最多的开源连接池这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有优缺点:稳定性还是可以,不过速...转载 2019-11-01 15:23:11 · 434 阅读 · 0 评论 -
Oracle索引
Oracle索引Oracle索引(index)最大的作用是用来优化数据库查询的效率,提升数据库的查询性能。就好比书的目录一样,可以通过目录来直接定位所需内容存在的页数,大大提高检索效率。Oracle数据库中如果某列出现在查询的条件中,而该列的数据是无序的,查询时只能从第一行开始一行一行的匹配。创建索引就是对某些特定列中的数据进行排序或归类,生成独立的索引表。在某列上创建索引后,如果该列出现...转载 2019-10-26 20:02:49 · 147 阅读 · 0 评论 -
三种基本的存储引擎比较
Mongo3.0 开始包含了支持B+和LSM的 Wired Tiger引擎。许多关系数据库可以配置索引结构,使用不同的文件格式。这里对几种存储引擎做一个比较,以加深了解:1、Hash存储引擎代表数据库:redis、memcache等通常也常见于其他存储引擎的查找速度优化上。 Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到...转载 2019-10-27 15:01:39 · 216 阅读 · 0 评论 -
数据库管理系统(DBMS)的主要功能
主要功能1.数据定义:DBMS提供数据定义语言DDL(Data Definition Language),供用户定义数据库的三级模式结构、两级映像以及完整性约束和保密限制等约束。DDL主要用于建立、修改数据库的库结构。DDL所描述的库结构仅仅给出了数据库的框架,数据库的框架信息被存放在数据字典(Data Dictionary)中。2.数据操作:DBMS提供数据操作语言DML(Data...原创 2019-10-23 23:14:54 · 14070 阅读 · 0 评论 -
数据库处理一个查询的步骤
1. 客户端发送一条查询给服务器;2. 服务器先会检查查询缓存query cache,如果命中了缓存,则立即返回存储在缓存中的结果。否则进入下一阶段;3. 服务器端进行SQL解析parsing、预处理transition,再由优化器optimization生成对应的执行计划;4. 根据优化器生成的执行计划,调用存储引擎的API来执行分布distribution查询;5. 将结果返回...原创 2019-10-23 18:41:17 · 2271 阅读 · 0 评论