数据库
文章平均质量分 70
zhifeng687
这个作者很懒,什么都没留下…
展开
-
limit深分页慢的原因以及解决方式
我们日常做分页需求时,一般会用limit实现,但是当偏移量特别大的时候,查询效率就变得低下。本文将分4个方案,讨论如何优化MySQL百万数据的深分页问题,并附上最近优化生产慢SQL的实战案例。limit深分页为什么会变慢?limit深分页为什么会变慢先看下表结构哈:CREATETABLEaccount(idint(11)NOTNULLAUTO_INCREMENTCOMMENT'主键Id',namevarchar(255)DEFAULTNULL...转载 2015-08-08 18:21:34 · 3013 阅读 · 0 评论 -
Mysql判断sql语句触发行锁还是表锁
前言我们前几篇讲了索引是什么,如何使用explain分析索引使用情况,如何去优化索引,以及show profiles分析SQL语句执行资源消耗的学习。今天我们来讲讲MySQL的各种锁,这里存储引擎我们使用InnoDB;准备工作创建表 tb_innodb_lockdrop table if exists test_innodb_lock;CREATE TABLE test_innodb_lock ( a INT (11), b VARCHAR (20)) ENGINE INNOD...转载 2016-09-12 15:07:21 · 1320 阅读 · 0 评论 -
sql server的服务器角色和数据库角色
先理解以下概念: sysadmin服务器角色的成员可以在服务器上执行任何活动。默认情况下,windows/administraters组(本地管理员组)的所有成员都是sysadmin固定服务器角色的成员。 public 服务器角色不是固定服务器角色,因为可以更改这些权限。public 服务器角色被授予 VIEW ANY DATABASE 权限什原创 2016-01-15 12:31:13 · 2117 阅读 · 0 评论 -
plsql连接简版oracle说明
1、 解压把oracle10g、PLSQL Developer文件夹放在某目录下,如H:\ProgramFiles\Oracle2、 右键计算机-属性,选中高级系统设置-环境变量增加三个环境变量:(H:\ProgramFiles\Oracle替换成对应路径,下同)ORACLE_HOMEH:\ProgramFiles\Oracle\oracle10g TNS_ADMINH:\ProgramFiles...原创 2016-03-18 13:00:09 · 541 阅读 · 0 评论 -
mysql有数据就更新,没数据就插入
原文链接:sql插入数据已经存在,则执行update更新-mysql教程-数据库-壹聚教程网http://www.111cn.net/database/mysql/76509.htm在很多项目中,我们需要对数据进行不断的调用和更新,如果有新的数据过来,还要把它加入到数据库中。其中非常重要的一种情况就是,我们不知道传过来的数据是不是原本数据库中就已经有了的记录,所以我们常常需要先通过抓取转载 2016-06-30 11:28:27 · 8893 阅读 · 0 评论 -
sql语句中GROUP BY 和 HAVING的使用
在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。SELECT SUM(population) FROM bbc这里的SUM作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。...转载 2016-07-13 12:31:39 · 640 阅读 · 0 评论 -
ShardingSphere的一些概念
背景传统的将数据集中存储至单一数据节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足互联网的海量数据场景。从性能方面来说,由于关系型数据库大多采用B+树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得磁盘访问的IO次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中式数据库成为系统的最大瓶颈。从可用性的方面来讲,服务化的无状态型,能够达到较小成本的随意...转载 2016-07-13 12:39:32 · 1192 阅读 · 0 评论 -
join查询及相比逗号连接查询的优势
sql的join分为三种,内连接、外连接、交叉连接。以下先建2张表,插入一些数据,后续理解起来更方便一些。create table emp(empno int, name char(20),depart int);create table depart(dpno int,dpname char(20));insert into emp values (1,'bell',1);inse...转载 2016-07-07 16:36:13 · 2986 阅读 · 2 评论 -
mysql事务隔离级别和脏读、不可重复读、幻读
spring(数据库)事务隔离级别分为四种(级别递减):1、Serializable (串行化):最严格的级别,事务串行执行,资源消耗最大;2、REPEATABLE READ(重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。3、READ COMMITTED (提交读):...转载 2016-07-27 16:56:52 · 2333 阅读 · 0 评论 -
鲜花网数据库设计
1、用户注册时只提交邮箱和密码所以创建user表用户有多个收货地址所以创建user_detail表其中UserId是外键,引用user表的UserId。因为一个user可以有多个收货人信息,所以应该将user表的主码和这些多值属性独立构成一个关系模式,所以就有了user_detail表反对user表和user-detai表原创 2016-05-26 11:13:53 · 1838 阅读 · 0 评论 -
外键级联删除
--建立数据库create database test;go--建立表customerscreate table customers(id int identity(1,1) not null,name varchar(15),age int,primary key(id));go--建立表orderscreate table orders(转载 2016-07-07 16:07:03 · 1320 阅读 · 0 评论 -
oracle 表空间的建立
storage ( initial 64K minextents 1 maxextents unlimited );什么意思数据库的逻辑结构如下:数据库是由一系列表空间(tablespace)组成,表空间由若干段(segment)组成,段由若干区(extent)组成,区由若干块(block)组成当在表空间中创建表时,系统先分配一个初始空间,这个空间大小由initial这个参数决定,此处为转载 2016-07-28 17:32:17 · 337 阅读 · 0 评论 -
要用PLSQLDEV必须安装oracle客户端且不支持64位oracle客户端
用PLSQL Developer必须要安装oracle客户端,因为需要在客户端配置相关的内容才能用PLSQL Developer。配置方法:1、找到$ORACLE_HOME/client_1/network/admin目录下的tnsnames.ora文件,并用文本模式打开。2、添加以下内容:本地实例名= (DESCRIPTION = (ADDRESS转载 2016-07-29 15:47:48 · 1097 阅读 · 0 评论 -
oracle用户的权限
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。 RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。 CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库构。 对于普通用户:授予connect, resource权限。 对于DBA管理用户:授予connect,resource, db转载 2016-07-27 09:41:59 · 282 阅读 · 0 评论 -
建立数据库,然后创建表空间、建用户、授权、用IMP导入DMP文件
--1、用system登录创建表空间 CREATE TABLESPACE NEWJWDB DATAFILE 'D:\oracle\product\10.2.0\oradata\NEWJWDB01.DBF' SIZE 200M autoextend on next 200M maxsize 3024M --2、创建用户CREATE USER NEWJW IDE转载 2016-08-02 18:00:00 · 3179 阅读 · 0 评论 -
PL/SQL Developer的调试存储过程
学会使用PL/SQL Developer的调试功能,对于编写复杂的存储过程,包,funtion...非常有帮助,所以今晚学习了一下:(1)在sp里设置断点。(2)点击TEST. (3) Debug-->Start.(4)点击红色框的按钮进行单步调试。(5)把鼠标放到变量上。 CREATE OR原创 2016-08-18 14:08:54 · 586 阅读 · 0 评论 -
group by 多个条件
关于group by 两个或以上条件的分析 首先group by 的简单说明: group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素: (1) 出现在select后面的字段 要么是是聚合函数中的,要么就是group by 中的. (2) 要筛选结果 可以先使用where 再用grou转载 2016-08-29 16:01:08 · 4697 阅读 · 0 评论 -
pl/sql developer调试存储过程
这个工具很重要,在大型的项目中,一个过程往往会嵌套多个子过程,然后出错时报出异常信息说调用哪个过程出错。比如调用过程dybm.b04001出错。你取出这个报错的过程信息,放在这个find db objects里就能定位到这个出错过程。给它设置断点,再进行调试,就能给这个出错过程附加上数据。同时还有一点要注意的是:后台调试与前台查询不可同时进行后台调试存储过程时,会把表锁住,此时,如果不把 存储过程...原创 2016-09-10 00:29:28 · 518 阅读 · 0 评论 -
Oracle中%TYPE和%ROWTYPE说明
%type 对应一个字段%rowtype 对应一条记录(即2个以上字段)1. 使用%TYPE 在许多情况下,变量应该拥有与表列相同的类型。例如,emp表的name列的类型为VARCHAR2(20),我们可以使用硬编码写法声明一个变量: DECLARE var_Name VARCHAR2(20); 这样可以实现,但是如果name列的定义改变了,比如将name字段的类型变为转载 2016-08-20 11:11:22 · 4764 阅读 · 0 评论 -
存储过程中游标的使用
例如:一个公司,按照如下规则计算加薪金额: 1.公司中除了总裁(president)外,所有人都会至少增加p_min的薪水 2.任何奖金(bonus)高于$600的员工都会另增加4% 3.员工的佣金(commission)越高,增加越少。佣金(commission)少于$2000的另增加3%,佣金(commission)在$2000到$3000的增加另2% 4.佣金(commiss转载 2016-08-20 15:02:16 · 836 阅读 · 0 评论 -
游标的for循环
原文链接:http://www.cnblogs.com/fjfzhkb/archive/2007/09/12/891031.html(1)FOR循环游标 (常用的一种游标) --定义游标 --定义游标变量 --使用for循环来使用这个游标 --前向游标 只能往一个方向走 --效率很高 declare --类型定义转载 2016-08-20 15:49:49 · 5317 阅读 · 0 评论 -
oracle的dual表
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。我们可以用它来做很多事情,如下: 1、查看当前用户,可以在 SQL Plus中执行下面语句 select user from dual; 2、用来调用系统函数 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from du转载 2016-09-11 18:26:56 · 247 阅读 · 0 评论 -
彻底搞懂Oracle的左外连接和右外连接
Employees表: Department表: select e.last_name,e.department_id,d.department_namefrom employees eleft outer join departments don (e.department_id = d.department_id); select e.last_name, d.departm...转载 2016-09-11 19:46:08 · 476 阅读 · 0 评论 -
选择有2条以上记录的个人顺序号和它的记录行数
在失业人员资料表中,一个个人顺序号对应多个失业资料顺序号即一个个人顺序号在失业人员资料中可能对应多条记录。选择有2条以上记录的个人顺序号和它的记录行数。select grsxh, count(grsxh) from yz_shiyeryzl group by grsxh having count(grsxh)>1像这种要求,原创 2016-08-23 14:57:57 · 1189 阅读 · 0 评论 -
oracle怎么拷贝一个表的数据进入临时表
比如临时表叫temp,你要查询的语句为select * from 表名 where id=1。如果temp表存在:insert into temp select * from 表名 where id=1;commit;如果temp表不存在create table temp as insert into temp select * from 表名 where id=1;转载 2016-08-24 09:57:15 · 5224 阅读 · 0 评论 -
oracle创建事务级临时表
-- Create tablecreate global temporary table YS_GRYJ_GTT( XTJGDM VARCHAR2(4) not null, GRSXH NUMBER(12) not null, DWSXH NUMBER(12) not null, XZLX VARCHAR2(3) not null, J原创 2016-08-24 10:45:16 · 2294 阅读 · 0 评论 -
oracle带参数的游标
Oracle中的游标可以带参数么?具体怎么实现呢?可以啊,参数在游标定义时使用,打开时传入参数,例如:create or replace procedure aas cursor b(c_id int)is select * from d where id=c_id; begin open b(111); end;参游标是指带有参数的游标。在定义了参数游转载 2016-08-25 11:14:12 · 13918 阅读 · 1 评论 -
PL/SQL Developer 默认是不会自动提交事务的
设置PL/SQL Developer自动提交事务_百度经验http://jingyan.baidu.com/article/ac6a9a5e66804d2b653eaca9.html今天PL/SQL Developer上用SQL语句删除部分数据,删除成功后,在页面上,发现一个怪异的现象,我删除的数据居然还存在!简单来说就是:在PL/SQL Develop转载 2016-08-25 16:28:59 · 8858 阅读 · 2 评论 -
oracle查询和Mysql查询
oracle查询to_char把查询出来的数字类型结果转换为字符串类型select * from CHK_YWCFSC where ywglsxh=( select to_char(dyzlsxh ) from yz_dyzl where grsxh='462323' )在Oracle使用sql语句中如何插入日期格式的数据update yz_shiyeryzl set jbrq...转载 2016-08-26 11:48:36 · 9436 阅读 · 0 评论 -
数据库原理
MYISAM与innodb搜索引擎原理MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。其采用索引文件与数据文件,索引文件只存放索引,叶子节点存放数据的物理地址。数据文件存放数据。其索引方式是非聚集的。 InnoDB也使用B+Tree作为索引结构。但是它的主索引与数据都放在一个文件中。这种索引叫做聚集索引,因为InnoDB的数据文件本身要按主键聚集,所以I...转载 2016-08-15 09:30:36 · 4676 阅读 · 0 评论 -
经典MySQL的sql语句面试题
一、取得平均薪水最高的部门的部门编号第一步:求出部门的平均薪水select e.deptno, avg(e.sal) as avgsal from emp e group by e.deptno;deptnoavgsal102916.666667202715.000000301566.666667第二步:将以上查询结果当成临时表t(deptno, avgsal),查询平均薪水的最高值sele...原创 2016-09-06 10:03:38 · 4743 阅读 · 2 评论 -
怎么查看package的声明和定义
在pl/sql developer中,你在sql window中输入package_name,右键package_name然后点击EditSpec&Body然后选择第二个选项卡就是包体了Package的用处function和stored procedure实际上就跟我们写代码中用到的一个个函数是一样的,只不过stored procedure是没有...转载 2016-08-15 10:17:33 · 994 阅读 · 0 评论 -
oracle在存储过程中给变量赋值
oracle变量赋值有两种一种是直接:=,两个字符串的连接不可以用 '+' ,要用 '||' 还有就是select into 下面是我写的例子: create or replace procedure DAILYSTATIC isMAX_TMP int;AVG_TMP int;HIGH_TIME转载 2016-08-15 10:31:22 · 26201 阅读 · 0 评论 -
MYSQL RR隔离级别下MVCC及锁解读
MVCC(Multi-Version Concurrent Control):多版本并发控制,只作用于RC和RR隔离级别,主要是为了避免脏读、非重复读,而非幻读,很多文章说通过MVCC避免幻读,其实这种说法是不完善的,RR隔离级别是通过next-key lock 来避免幻读。优点:避免了许多需要加锁的情形缺点:需要维护每行记录版本号,造成额外资源消耗事物四种隔离级别:我...转载 2016-09-08 09:05:15 · 1089 阅读 · 0 评论 -
mysql实现可重复读(解决幻读)的原理(MVCC机制的版本链和读视图)
MVCC(Multi-Version Concurrency Control ,多版本并发控制)指的就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程,这样子可以使不同事务的读-写、写-读操作并发执行,从而提升系统性能。READ COMMITTD、REPEATABLE READ这两个隔离级别的一个很大不同就是生成ReadView的时机不同,READ COMMITTD在每一次进行普通SELECT操作前都会生成一个转载 2016-09-08 11:28:06 · 33639 阅读 · 5 评论 -
''最少有一个"为什么跟distinct 有关
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金列出至少有一个员工的所有部门。 select *from dept where deptno in(select di原创 2016-09-21 16:17:24 · 321 阅读 · 0 评论 -
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名
刚才在网上看到如下, ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表.oracle解析器解析的方式是怎么样的? 能说一说为什么需要把记录条数最少的表作为基础表.我已经测试了 确实 记录条数最少转载 2016-08-23 14:13:23 · 3117 阅读 · 0 评论 -
连接查询相比子查询的优势
在设计鲜花网数据库的时候,有一张表是鲜花信息表flower该表里有名称fname,图片地址index_picture,市场价price,优惠价yourprice,鲜花id号flowerID还有一张表是购物车信息表该表里的字段有用户MemberId,鲜花id号FlowerId,鲜花数量FlowerNum现在要选出某个用户的购物车里所有鲜花的名称,图片地址,市场价,优惠价,鲜花数量原创 2016-06-06 19:01:00 · 3664 阅读 · 0 评论 -
Oracle 客户端连接远程数据库配置注意事项
在安装目录D:\app\lizhifeng91242\product\11.2.0\client_1\network\admin里查看有没有tnsnames文件,如果没有的话,创建此文件,注意不是tnsnames.ora文件原创 2016-08-09 13:58:23 · 1165 阅读 · 0 评论 -
oracle数据库tns配置方法详解
Oracle当中,如果想访问某个服务器,必须要设置TNS,它不像SQL SERVER那样在客户端自动列举出在局域网内所有的在线服务器,只需在客户端选择需要的服务器,然后使用帐号与密码登录即可。而Oracle不能自动列举出网内的服务器,需要通过读取TNS配置文件才能列出经过配置的服务器名。转载 2016-04-21 23:53:36 · 9019 阅读 · 0 评论