榆树范文网

数据库总结(汇总15篇)

73

数据库总结 第1篇

时间一晃而过来公司5个月的时间,以快速了解交通银行实物资产系统的业务需求,进行对系统的分析,这是我人生中弥足珍贵的一段经历。在这段时间里领导在工作上给予了我极大的帮助,让我充分感受到了领导们“海纳百川”的胸襟,感受到了大发人“不经历风雨,怎能见彩虹”的豪气。肃然起敬的同时,也为我有机会成为一份子而自豪。每个人都是在不断的总结中成长,在不断的审视中完善自己。在这段时间里自己也是在总结、审视中脚踏实地地完成好本职工作,现将这段时间总结如下:

1、对交通银行的实物资产系统的整个数据库的规划;

2、分拆库设计,登陆及权限库,全行库,分行库,批处理库,建示意图,开发部和业务部开会讨论确认,最后按方案设计;

3、数据库设计、数据分析、系统开发维护和管理工作。

4、设计备份与恢复策略并贯彻实施、设计数据库高可用性方案并贯彻实施。

5、设计数据库高可用性方案并贯彻实施、根据业务及应用开发需求进行数据建模、开发较复杂的后台存储过程及触发器。

6、主持开发过大型数据库系统,能够通过良好数据库结构设计解决海量数据的高效处理

我有一个人生目标:做最有影响力的自己。它不是靠哗众取宠能够得来的,而是需要不断提升梦想的高度、拓展心灵的宽度、累积思想的厚度!我相信,我的人生目标在以后的路上会一直影响我的职业生涯。熟练掌握我们的产品。力争做个技术骨干!这是我对自己一个总体要求!

数据库总结 第2篇

紧张而有序的一年又要过去了,忙碌的一年里,在公司领导及各部门各同事的帮忙下,我顺利的完成了本年度的工作。为了今后更好的工作,总结经验、吸取教训,本人就本年度的工作总结如下:

首先说说工作态度,因为态度决定一切。

肯定说开机密码输不上,键盘坏了,不厌其烦的让我过去,过去一看是小键盘灯没打开,真是哭笑不得。如果按正常的程序这种事是能够避免的,又能够节省成本。基层部分员工没有计算机基础,没有职责心,依靠性太强,其实在使用过程中不免会出现这样或那样的问题,只要大家平心对待以解决问题为目的,而部分员工对此就出现了急躁心理,让他说故障现象一问三不知,就一句话你过来一趟吧!此时,去也不是不去也不是呀,头疼!

还有就是不管是在何时何地,只要是工作问题都毫不推托,尽快解决。其中ERP软件服务器的采购及系统的安装与数据的复制,也投入了很大时间与精力。从上下班制度来说,从没有迟到早退过。对领导的工作安排及吩咐从没有推迟过,都会尽职尽责尽快解决。在业余时间加强自我对专业知识的学习,保证自我有潜力解决属于自我就应解决的问题。

其次说说工作成绩,因为成绩代表一切。

先说说我的工作量:

2、负责公司总部及各个分公司、工厂、新品部计算机、打印机、复印机、传真机等一切办公设备的预购、采购、调试安装、培训使用、维护维修及所涉及到的耗材采购。并要保证其所有采购设备耗材价格的性价比。并尽可能的降低设备使用故障率,在其出现故障的时候,以最快的速度得到解决;

3、负责公司ERP软件及管家婆载体服务器的采购、协助安装、调试、维护等,包括ERP软件的管理操作如操作用户的权限设置、培训使用、数据维护等,负责公司所需的其它软件的选购如QQ等的调试、培训使用及维护等等;

4、负责公司总部和各分公司集团电话的维护及总部电话费用的统计管理等等;

5、负责公司总部及北京分公司、工厂、新品部一切跟电子电器有关系的所有大小事务。

数据库总结 第3篇

数据库的完整性是指数据的正确性和相容性。数据库完整性需要满足的功能:提供定义完整性约束条件的机制、提供完整性检查的方法、进行违约处理。

实体完整性定义:CREATE TABLE中用PRIMARY xxx定义

插入或对主码列进行更新操作时,RDBMS按照实体完整性规则自动进行检查。包括:①检查主码值是否唯一,如果不唯一则拒绝插入或修改②检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改

系统会自动为主码建立一个主索引,方便检索,索引一般是B+树。

参照完整性定义:在CREATE TABLE中用FOREIGN xxx短语定义哪些列为外码

参照完整性违约处理:①拒绝(NO ACTION)执行:默认策略②级联(CASCADE)操作:删除一个元组,其他相关的会级联删除③设置为空值(SET-NULL):对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值

用户定义完整性,在属性上的定义:CREATE TABLE时定义

①列值非空(NOT NULL):

②列值唯一(UNIQUE):

③检查列值是否满足一个xxx表达式(CHECK):

数据库总结 第4篇

数据库是长期存储在计算机内、有组织的、可共享的大量数据的集合。  数据库中存储的是数据及数据之间的关系。

永久存储、有组织、可共享。  (数据的最小存取单位是数据项)

数据独立性包括:物理独立性和逻辑独立性  a)物理独立性(外模式\模式映像):  用户程序不需要了解,应用程序要处理的只是数据的逻辑结构,这样当数据的物理存储改变了,应用程序不用改变。  b)逻辑独立性(模式\内模式映像):  逻辑独立性是指用户的应用程序与数据库的逻辑结构是相互独立的,即,当数据的逻辑结构改变时,用户程序也可以不变。  逻辑数据独立性(logical data independence)是指概念模式改变,外模式和应用程序不变。在逻辑数据独立性里,数据的逻辑结构发生改变或存储关系的选择发生改变时用户不会受到影响。改变概念模式,例如增加和删除实体、增加和删除属性、增加和删除联系,不需要改变现有的外模式或重写应用程序。在DBMS中只需要修改视图的定义和映像来支持逻辑数据独立性。对用户来说,不再关心所做的修改是非常重要的。换句话说,模式经过逻辑重构之后,根据外模式构建的应用程序还是和从前一样工作。

概念模型的一种表示方法:实体联系方法,用E-R方法(E-R模型)来描述。  概念模型是用于信息世界的建模,是一种信息模型,与具体的DBMS无关。且能满足用户对数据的处理要求,易于修改。  概念模型与具体数据模型无关且容易向数据库模型转化。

一个联系转化为一个关系模式,与该联系相连的各实体的码以及联系的属性转化为关系的属性,该关系的码则有三种情况:  若联系为1:1,则每个实体的码均是该关系的后选码。  若联系为1:n,则关系的码为n端实体的码。  若联系为m:n,则关系的码为诸实体码的组合。

数据库模式定义语言DDL(Data Definition Language):是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。

在关系模型中,关系完整性主要是指以下三方面:

所谓的实体完整性就是指关系(所谓的关系就是表)的主码不能取空值;  比如学生表的主码通常是取学号为主码

是指参照关系中每个元素的外码要么为空(NULL),要么等于被参照关系中某个元素的主码;  参照关系也称为外键表,被参照关系也称为主键表。

指对关系中每个属性的取值作一个限制(或称为约束)的具体定义。比如 性别属性只能取”男“或”女“,再就是年龄的取值范围,可以取值0-130 ,但不能取负数,因为年龄不可能是负数。

目地:使结构更合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。  原则:遵从概念单一化“一事一地”原则,即一个关系模式描述一个实体或实体间的一种联系。  规范的实质:概念的单一化。  规范化的方法:将关系模式投影分解成两个或两个以上的关系模式。

数据库总结 第5篇

SQL 语言是非过程化的语言,易学习。  SQL语言具有两种使用方式:一种是在终端交互方式下使用,称为交互式SQL; 另一种是嵌入在高级语言的程序中使用,称为嵌入式SQL,而这些高级语言可以是C、PASCAL、COBOL等,称为宿主语言。

关系数据库系统支持 三级模式结构,其概念模式、外模式和内模式中的基本对象有表、视图和索引。  三级模式结构有效地组织、管理数据,提高了数据库的逻辑独立性和物理独立性。使数据库达到了数据独立性。

A.概念

是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。是数据库系统模式结构的中间层,即不涉及数据的物理存储细节和硬件环境,也与具体的应用程序、开发工具及高级设计语言无关。  模式是数据库数据在逻辑级上的视图,一个数据库只有一个模式。

也用于区分一个 大项目中的各个小项目,这样若有相同名字的表的话, 不同模式不会发生冲突。相当于编程时的命名空间。  如:  一个公司的系统,分2个子系统,分别为财务系统和人力资源系统.  这2个子系统, 共用一个数据库。  那么 财务系统的表, 可以放在财务的模式(schema).  人力资源系统的表,放在人力资源系统的模式里面。  这2个子系统,能够互相访问对方的表。  但是又不因为 表重名 的问题,影响对方。

B.访问

访问具体的一个表,可以由 4个部分组成  分别为 服务器名, 数据库名,模式名,表名。

对于访问本地的数据库:  不指定模式名的话, 数据库默认使用dbo模式。  (DBO是每个数据库的默认用户,具有所有者权限,即DbOwner )

是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。  外模式通常是模式的子集,一个数据库可以有多个外模式,但一个应用程序只能有一个外模式。  外模式是保证数据库安全性的一个有力措施:用户只能访问外模式的数据,其余数据不可见。

一个数据库只有一个内模式。  内模式是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。

数据库管理系统在三级模式之间提供了两层映像:  外模式/模式映像(保证数据的逻辑独立性)  模式/内模式映像(保证了物理独立性)

表分为临时表和永久表。

临时表

临时表存储在tempdb中(如下),当不再使用时会自动删除。

根据进程独立,只有进程的拥有者有表的访问权限,其它用户不能访问该表;  不同的用户进程,创建的临时表虽然“名字”相同,但是这些表之间相互并不存在任何关系;在SQLSERVER中,通过特别的命名机制保证临时表的进程独立性。

临时表有两种类型:本地和全局。

A.本地临时表

名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。

B.全局临时表

名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该表的用户从 SQL Server 断开连接时被删除。

临时表优点

真正的临时表利用了数据库临时表空间,由数据库系统自动进行维护,因此节省了表空间。并且由于临时表空间一般利用虚拟内存,大大减少了硬盘的I/O次数,因此也提高了系统效率。

临时表的创建

A. create table #临时表名  * into #临时表名 from 表名(永久表或临时表)

A.概念

视图是一张虚拟表,视图的字段是自定义的,视图只支持查询,查询数据来源于实体表。

B.优点

视图可以将多个复杂关联表提取信息,优化查询速度。

为了改变数据库的性能和可访问性所增加的一组辅助性数据。  详细介绍见下文。

在xxxql中:  查看数据库:

建库:

调用数据库

建表  主键、非空、唯一取值。

外键:

数据库处理一个查询的步骤:  客户端连接->查询缓存->解析器->预处理器->查询优化器->查询执行引擎->数据

等于:=  不等于:<>或!=  不大于:!>  空值:is null,is not null  确定集合:in,not in  确定范围:between and,not between and  //X BETWEEN 20 AND 30 等价的表达式是X>=20 AND X<=30

字符匹配:like,not like 模糊查询使用  %代表任意长度(可为0)的字符串;  _(下划线):代表任意单个字符。(汉字代表2个字符,所以一个汉字用两个下划线)  \为转义字符

默认为asc:升序排列。desc:降序排序。  单个排序:

多重排序:

应用:

having只能用在group by之后(即having后面紧跟组条件表达式),对分组后的结果进行筛选,筛选行(即使用having的前提条件是分组).

where肯定在group by 之前  where后的条件表达式里不允许使用聚合函数,而having可以。

count:

是数据库的一个标准。以下代码 写在存储过程前面,表示遵从SQL-92 规则。  SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<) 比较时取值为 FALSE。

SET ANSI_NULLS ON  即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 xxxECT 语句仍返回零行。  即使 column_name 中包含非空值,使用 WHERE column_name < NULL 的 xxxECT 语句仍会返回零行。

SET QUOTED_IDENTIFIER ON  为ON:标识符可以由双引号分隔,而文字必须由单引号分隔。  为OFF:标识符不可加引号。

如果内层查询语句查询到符合条件的记录,就返回一个真值(true),否则,将返回  一个假值(false)。

同理还有:NOT EXISTS。

有自增长主键(id)的插入:  i>可以把id的值设置为null或者0,这样xxxql会自己做处理  ii>手动指定需要插入的列,不插入这一个字段的数据!

删除表中几行:

删除表中所有行,保留表、不释放空间。所删除的每行记录都会进日志,可以回滚。

删除表:删除内容和定义,释放空间

删除表中所有数据,保留表、同时释放空间(速度比delete快,但是无法撤回,日志里面只记录页释放):

列名、表名、存储过程名、函数名等都可以按需要加中括号。防止某些关键字在应用中引起歧义。

举例:

举例:

由DBA(数据库管理员,Database _,简称DBA)在创建用户时实现。

只有系统的超级用户才有权创建一个新的数据库用户  新创建的用户有三种权限:DB,|RESOURCE,CONNECT

给角色授权:

将一个角色授予其他的角色或用户

角色权限的收回

在安全系统中创建一项,以拒绝给当前数据库内的安全帐户授予权限并防止安全帐户通过其组或角色成员资格继承权限。

和授权区别:  不授权是没有权限,但是如果这个用户属于某个角色,这个角色有了权限,那么这个用户可以从角色继承这个权限。如果选择了deny,即使这个用户属于某个具有权限的角色,他也没有权限。

数据库总结 第6篇

数据库管理系统(DBMS):是系统软件,是数据库系统的核心。  常见数据库管理系统有:Access、xxxql、sql server

MySQL实现了四种通信协议:

i>TCP/IP协议

通常我们通过来连接MySQL,各种主要编程语言都是根据这个协议实现了连接模块

ii>Unix Socket协议

这个通常我们登入MySQL服务器中使用这个协议,因为要使用这个协议连接MySQL需要一个物理文件,文件的存放位置在配置文件中有定义,值得一提的是,这是所有协议中最高效的一个。

iii>Share Memory协议(共享内存协议)

这个只有windows可以使用,使用这个协议需要在配置文件中在启动的时候使用–shared-memory参数,注意的是,使用此协议,一个host上只能有一个server,所以这个东西一般没啥用的,除非你怀疑其他协议不能正常工作,实际上微软的SQL Sever也支持这个协议

iv>Named Pipes协议(命名管道协议)

打开SQL Server 配置管理器:运行命令。  SQL Server默认端口:1433

sqlite是一款轻量级数据库,是遵守ACID(指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))的关系型数据库管理系统。在嵌入式设备中,可能只需要几百K的内存就够了。  SQLite默认是打开事务的。

android手机root之后,就可以在/data/data/包名/database/目录中查看sqlite数据库。所以,对于敏感信息,应该考虑加密。

SQLite不支持加密,所以我们针对数据库文件加密。现有两种解决方案:

i>对数据库中的数据进行加密

①优点:  加密速度快。  程序无须变动,只针对数据进行加密。  ②缺点:  来回加密,造成处理数据缓慢。  仅对数据加密,依然可以看到数据表的sql语句,可能猜测到表的作用。  ③实现:  一是:对明文数据进行加密返回密文数据  二是:对密文数据进行解密返回明文数据

ii>对数据库文件进行加密

数据库总结 第7篇

存储过程是一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

存储过程因为SQL 语句已经预编译过了,因此运行的速度比较快。

可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理,既有利于集中控制,又能够方便地进行维护。  当用户规则发生变化时,只要修改存储过程,无须修改其他应用程序。

允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次,类似方法的复用。  增强了使用的安全性,充分利用系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。程序员直接调用存储过程,根本不知道表结构是什么,有什么字段,没有直接暴露表名以及字段名给程序员。

可设定只有某些用户才具有对指定存储过程的使用权。

调试麻烦(至少没有像开发程序那样容易),可移植性不灵活(因为存储过程是依赖于具体的数据库)。

当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;  当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。

sql尽量放在存储过程中。  面对大量数据,用orcle比sql server稳定。

数据库总结 第8篇

设X,Y是xxx的两个属性集合,存在X→Y,若X’是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

设X,Y是xxx的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

设X,Y,Z是xxx中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→xxx,当且仅当对R(U)的任一关系r,给定的一对(x,z)值有一组Y的值,这组值仅仅决定于x值而与z值无关。

举例:  有这样一个关系 <仓库管理员,仓库号,库存产品号> ,假设一个产品只能放到一个仓库中,但是一个仓库可以有若干管理员,那么对应于一个 <仓库管理员,库存产品号>有一个仓库号,而实际上,这个仓库号只与库存产品号有关,与管理员无关,就说这是多值依赖。

各个范式联系:  5NF⊂4NF⊂BCNF⊂3NF⊂2NF⊂1NF

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。  自我理解1NF就是无重复的列。  如:(X1,X2)→X3,X2→X3 其中x3对x2部分依赖  如:(X1,X2)→X3,X2→X4 其中有非主属性X4部分依赖于候选键{X1,X2},所以这个关系模式不为第二范式;又因为范式之间的关系满足1NF⊇2NF⊇3NF ⊇ BCNF,所以是第一范式。

若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。  即要求数据库表中的每个实例或行必须可以被唯一地区分。

若R∈3NF,则每一个非主属性既不部分依赖于码,也不传递依赖于码。  自我理解是:表中所有的数据元素不但要能唯一地被主键所标识,而且他们之间还必须相互独立,不存在其他的函数关系。

所有非主属性对每一个码都是完全函数依赖;  所有主属性对每一个不包含它的码,也是完全函数依赖;  没有任何属性完全函数依赖于非码的任何一组属性。

关系模式R

数据库总结 第9篇

并(∪)、差(-)、交(∩)、笛卡尔积(×)

在xxx中选择满足给定条件的诸元组。

xxx上的投影是从R中选择出若干属性列组成新的关系。  投影之后可既改变行,又改变元组的数量。

从两个关系的笛卡尔积中选取属性间满足一定条件的元组。(连接由乘积(笛卡尔积)、选择、投影组成)  分为等值连接(=)、自然连接(要求比较的分量是相同的属性组,并在结果中把重复的属性列去掉)。 

RS÷S的意义就是:“在R和S的联系RS中,找出与S中所有的元组有关系的R元组”。

非与或

数据库总结 第10篇

在SQL 语句在拼接的情况下,用户输入为一部分sql语句。

i> 对特殊字符进行过滤、转义或者使用预编译的sql 语句绑定变量

SQL执行时,2种方式:  ①字符串处理(拼接),然后执行SQL  用户输入的时候,可以通过输入sql语句来进行SQL注入。  ②传参,执行SQL –>交给SQL引擎(推荐)  用prepareStatement,参数用set 方法进行填装。

ii> 当sql 语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄漏服务器和数据库相关信息

iii>检查变量的数据类型和格式

只要是有固定格式的变量,在SQL 语句执行前,应该严格按照固定格式去检查,确保变量是我们预想的格式,这样很大程度上可以避免SQL 注入攻击。  例如:对于where id={$id}这种形式,数据xxx所有的id 都是数字,那么就应该在SQL 被执行前,检查确保变量id 是int 类型。

iv>所有的SQL 语句都封装在存储过程中

所有的SQL 语句都封装在存储过程中,这样不但可以避免SQL 注入,还能提高一些性能。

数据库总结 第11篇

① 通过explain(查询优化神器)用来查看SQL 语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。通常我们可以对比较复杂的尤其是涉及到多表的xxxECT 语句,把关键字EXPLAIN 加到前面,查看执行计划。例如:explain select * from news;  ② 任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。  ③ 不在索引列做运算或者使用函数。  ④ 查询尽可能使用limit 减少返回的行数,减少数据传输时间和带宽浪费。

该函数可以对表中列的数据类型提出优化建议。能小就用小。表数据类型第一个原则是:使用能正确的表示和存储数据的最短类型。这样可以减少对磁盘空间、内存、cpu 缓存的使用。  使用方法:select * from 表名procedure analyse();

通过拆分表可以提高表的访问效率。有2 种拆分方法:  1.垂直拆分  把主键和一些列放在一个表中,然后把主键和另外的列放在另一个表中。如果一个表中某些列常用,而另外一些不常用,则可以采用垂直拆分。  2.水平拆分  根据一列或者多列数据的值把数据行放到二个独立的表中。

创建中间表,表结构和源表结构完全相同,转移要统计的数据到中间表,然后在中间表上进行统计,得出想要的结果。

选择多核和主频高的CPU。

使用更大的内存。将尽量多的内存分配给MYSQL 做缓存。

i>使用磁盘阵列

RAID 0 没有数据冗余,没有数据校验的磁盘陈列。实现RAID 0至少需要两块以上的硬盘,它将两块以上的硬盘合并成一块,数据连续地分割在每块盘上。  RAID1 是将一个两块硬盘所构成RAID 磁盘阵列,其容量仅等于一块硬盘的容量,因为另一块只是当作数据“镜像”。  使用RAID-0+1 磁盘阵列。RAID 0+1 是RAID 0 和RAID 1 的组合形式。它在提供与RAID 1 一样的数据安全保障的同时,也提供了与RAID 0 近似的存储性能。

ii>调整磁盘调度算法

选择合适的磁盘调度算法,可以减少磁盘的寻道时间。

对MySQL 自身的优化主要是对其配置文件 中的各项参数进行优化调整。如指定MySQL 查询缓冲区的大小,指定MySQL 允许的最大连接进程数等。

它的作用是存储select 查询的文本及其相应结果。如果随后收到一个相同的查询,服务器会从查询缓存中直接得到查询结果。查询缓存适用的对象是更新不频繁的表,当表中数据更改后,查询缓存中的相关条目就会被清空。

(见上面)

i>主从复制(master,slave):

数据库总结 第12篇

这是第一次体验合作开发,也是我第一次当小组长.这次合作开发的收获是在实践中体会到了UML图和文档的重要性.以前自己一个人开发程序,没图没文档都没关系,因为自己一个人就可以掌握所有的逻辑;而合作开发则不一样,组员之间是要通过图和文档来交流的,没有了UML图和文档,合作开发将会成为无稽之谈,即使进行完了,程序基本也是不能用的.

合作开发的另一大收获是了解和体验了合作开发的基本流程,这是作为小组长的我的一大收获,开发的流程合理了,开发出的软件才是可用的,软件的配置项(文档+UML图)才会全,程序才会具有可维护性.

时间管理

1、GTD

我接触的第一种时间管理思想是GTD(get things done),它的核心是将大脑中的代办事项列出来,然后将代办事项按轻重缓急排序(四象限),剩下的事情就是To do the shings on the 这样做的结果就是无压学习,学习会变的很轻松,很高效。

2、番茄学习法

番茄学习法是我在自考学习的过程中学到的一种时间管理思想,说白了就是25分钟专注干一件事,然后开始休息5-10分钟,然后进入下一个循环。这样做的一大好处是:即能保证学习的专注性,又能保证学习的可持续性。

将GTD和番茄学习法联合起来就更完美了:用GTD列出代办事项,然后每个代办事项内部采用番茄学习法去完成。

自我感觉在时间管理方面做得还可以,但是还有很大的提升空间,离成功人士的标准还差的很远。

这一年的自考学习收获也是很大的,从米老师那里学到了快速阅读的方法,虽然自己的快速阅读能力还差的很远,但是起码知道了自己以前的阅读方法存在很大的问题,学会了先从宏观上把握一本书,然后再进入细节,看不懂的地方可以暂时先跳过,没准在什么地方会找到共鸣。

数据库总结 第13篇

关系:关系模型的数据结构非常简单,只包含单一的数据结构——关系。

域:一组具有相同数据类型的值的集合。

笛卡儿积:域上的一种集合运算。

定义:给定一组域D1,D2,...,Dn,允许其中某些域是相同的,D1,D2,...,Dn的笛卡儿积为:D1xD2 x...x Dn={ (d1,d2,...,dn) | di,i=1,2,...,n}

其中,每一个元素(d1,d2,...,dn)叫作一个n元组,或简称为元组(tuple),元素中的每一个值di叫做一个分量(component)。

一个域允许的不同取值个数称为这个域的基数。

若Di(i=1,2,...,n)为有限集,其基数为mi(i=1,2,...,n),则其笛卡儿积的基数m1*m2*…mn

1关系:笛卡儿积的有限子集。

定义:D1xD2x...xDn的子集叫做在域D1,D2,...,Dn上的关系,表示为:

R(D1,D2,...,Dn)  (R表示关系的名字,n是关系的目或度(degree))

当n=1:单元关系或一元关系

当n=2:二元关系     (n目关系必有n个属性)

关系中的每个元素是关系中的元组,通常用t表示。

关系是一张二维表,表中的每一行对应一个元组,表中的每列对应一个域。域可相同,为了区分得给每列起名,称为属性。

若关系中的某个属性组的值能唯一标识一个元组,而其子集不能,则称该属性组为候选码。若一个关系中有多个候选码,则选定其中一个为主码。候选码的属性称为主属性。

一般来说,笛卡儿积的某个真子集才有实际意义。 

关系的三种模式:基本关系(又称基本表或基表)、查询表和视图表。

(1)基本关系(基本表或基表):实际存在的表,是实际存储数据的逻辑表示(2)查询表:查询结果对应的表(3)视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

基本关系5种特质:

(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。

(2)不同的列可出自同一个域,其中的每一列为一个属性,不同属性要给予不同属性名。

(3)列或行的顺序无所谓,即列的次序或行的次序可以任意交换。

(4)任意两个元组的候选码不能取相同的值。

(5)分量必须取原子值,即每一个分量都必须是不可分的数据项。

关系模式(Relation Schema)是型,关系是值

关系模式:是对关系的描述,是静态的、稳定的。

关系:关系模式在某一时刻的状态或内容,动态的、随时间不断变化的。

一个关系模式应当是一个五元组:R(U,D,DOM,F)R:关系名,它是符号化的元组语义U:一组属性D:属性组中所来自的域DOM:属性到域的映射F:属性组U上的一组数据依赖其中D和DOM对模式设计关系不大,所以可以当做三元组:R(U,F)

关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。

三大要素:运算对象(关系)、运算符(集合运算符和专门的关系运算符)和运算结果(关系) 

五种基本操作:

(Union):设xxx和xxx具有相同的元数n,且相应的属性取自同一个域,则xxx和xxx的并由属于R或属于S的元组组成,其结果仍为n元的关系

(Difference):设xxx和xxx具有相同的元数n,且相应的属性取自同一个域,则xxx和xxx的差由属于xxx而不属于xxx的元组组成,其结果仍为n元的关系

笛卡尔积(Cartesian Product):设xxx和xxx的元数分别为r和s。定义R和S的笛卡尔积是一个(r+s)元的元组集合,每个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组

投影(Projection):对关系进行垂直分割,消去某些列,xxx安排列的顺序,再删去重复元组

选择(Selection):根据某些条件对关系做水平分割,即选择符合条件的元组

四种组合操作:

(Intersection):设xxx和xxx具有相同的元数n,且相应的属性取自同一个域,则xxx和xxx的交由既属于xxx又属于xxx的元组组成,其结果仍为n元的关系。关系的交可以由关系的差来表示。

联接(Join):联系操作是笛卡尔积和选择操作的组合。

自然联接(Natural Join):是一种特殊的等值联接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。

一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。

两个xxx和S在做自然连接时,选择两个关系在公共属性上值相等的元组构成新的关系。此时,xxx中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,同样,S中某些元组也可能被舍弃。这些被舍弃的元组称为悬浮元组。如果把悬浮元组也保存在结果关系中,而在其他属性上填空值(NULL),那么这种连接就叫做外连接。只保留左边关系的悬浮元组叫左外连接,右则右外连接

(Division):设两个xxx和S的元数分别为r和s(设r>s>0),那么R除S是一个(r-s)元的元组的集合。它是满足下列条件的最大关系:其中每个元组t与S中的每个元组u组成的新元组必在xxx中。除运算是笛卡尔积的逆运算。关系操作的特点是集合操作方式:操作的对象和结果都是集合,一次一集合的方式

 第03章 关系数据库标准语言SQL

SQL特点:综合统一,高度非过程化(只需要提出“做什么”,不需要指明“怎么做”,因而无须了解存储路径。),面向集合的操作方式,以同一种语法结构提供多种使用方式,语言简洁易学易用。

DML(Data Manipulation Language):数据操作语言

关键字:insert、delete、update, select

插入、删除、更改数据DDL(Data Denifition Language):数据定义语言关键字:create、drop、alter创建、删除、更改数据库对象(表、视图、索引、触发器、存储过程等)TCL(Trasactional Conrtol Language):事务控制语言关键字:commit、rollback用来提交和回滚事务DCL(Data Conrtol Language):数据控制语言关键字:grant、revoke用来设置或更改数据库用户或角色权限

基本表本身独立存在的表,SQL中一个关系就对应一个基本表,一个(或多个)基本表对应一个存储文件,一个表可以带若干索引

视图从一个或几个基本表导出的表,数据库中只存放视图的定义而不存放视图对应的数据视图是一个虚表,用户可以在视图上再定义视图

创建数据库CREATE DATABASE  <数据库名>;

 创建基本表:CREATE TABLE <表名>(

<列名> <数据类型>[ <列级完整性约束条件> ],<列名> <数据类型>[ <列级完整性约束条件>] , …<表级完整性约束条件> ] );

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

1、表的常用的数据类型

2、表的常见列级完整性约束条件

3、表的常见表级完整性约束条件

修改基本表:ALTER TABLE <表名>[ ADD <新列名> <数据类型> [ 完整性约束 ] ][ DROP <完整性约束名> ][ ALTER COLUMN<列名> <数据类型> ];

删除基本表:DROP TABLE <表名>[RESTRICT| CASCADE];RESTRICT:删除表是有限制的。欲删除的基本表不能被其他表的约束所引用;如果存在依赖该表的对象,则此表不能被删除。CASCADE:删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除

数据查询:xxxECT [ALL|DISTINCT] <目标列表达式>[,…,<目标列表达式>] FROM <表名或视图名>[,…, <表名或视图名> ] [ WHERE <条件表达式> ][ GROUP BY <列名1> [ HAVING <条件表达式> ] ][ ORDER BY <列名2> [ ASC|DESC ] ];

WHERE子句常用查询条件

like字符匹配:’’ % ‘‘代表任意长度;’’ _ ''代表单一字符。

聚集函数

聚集函数不能当WHERE的子句条件,HAVING和xxxECT里都可以用。

select子句:指定要显示的属性列

from子句:指定查询对象(基本表或视图)

where子句:指定查询条件

group by子句:对查询结果按指向列的值分组,该属性列值相等的元组为一个组,通常会在每组中作用聚集函数。

having短语:只有满足指定条件的组才予以输出

order by子句:对最终查询结果表按指定列值的升序(asc)或降序(desc)排序。

整个select语句的含义是:根据where子句的条件表达式从from子句指定的基本表、视图或派生表中找出满足条件的元组,再按select子句中的目标列表达式选出元组中的属性值形成结果表,然后根据group by (having)、order by、distinct等对结果表做进一步处理后返回最终的结果表。

1、查询所有列时,<目标列表达式>指定为*。<目标列表达式>可以是表中的属性列,也可以是表达式,还可以是字符串常量。用户可以通过指定别名来改变查询结果的列标题。

2、选择表中元组时可以指定distinct,即查询结果会消除重复行。默认是all(不管重复行,全部显示在查询结果表中)。

3、字符匹配之通配符:

%(百分号)表示任意长度(可为0)的字符串,例如a%b,表示以a开头,以b结尾的任意长度的字符串。

_(下横线)表示任意单个字符,例如a_b,表示以a开头,以b结尾的长度为3的任意字符串。

注意:如果用户要查询的字符串本身就含有通配符%或_,这时就要使用 escape'<换码字符>' 短语对通配符进行转义。

4、涉及空值的查询,_IS_不能用等号(=)代替。

and的优先级高于or,当条件比较复杂时建议书写时带上括号。

5、当聚集函数遇到空值时,除count(*)外,都跳过空值而只处理非空值。聚集函数只能用于select子句和group  by中的having子句。

6、where子句与having短语的区别:对象不同。

where子句作用于基本表或视图,从中选择出满足条件的元组,having短语作用于组,从中选择出满足条件的组。

1、查询同时涉及两个以上的表称之为连接查询,是关系数据库最主要的查询。主要包括等值与非等值查询、自身连接、外连接及多表连接。

2、等值与非等值连接查询:where子句用来连接两个表的条件称为连接条件,当连接运算符为=时即称为等值连接,否则非等值连接。连接条件的列名称为连接字段,连接条件中的各连接字段类型必须是相容的,名字可不相同。

3、自身连接:连接操作可以是一个表与其自己进行连接。此时注意要给表取别名。

4、外连接:连接后把悬浮元组保存在结果关系中。有左外连接和右外连接。

5、多表连接:连接操作可以是两个以上的表进行连接。执行时一般是先进行两个表的连接操作,再将其连接结果与第三个表进行连接,以此类推。

一个select …from…where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称嵌套查询。

SQL语言允许多层嵌套查询,子查询的select语句中不能使用order by子句,order by子句只能对最终查询结果排序。用户可以用多个简单xxx成复杂的查询,从而增强SQL的查询能力。

1、带有IN谓词的子查询

子查询的结果往往是一个集合。

不相关子查询:子查询的查询条件不依赖于父查询。

相关子查询:子查询的查询条件依赖于父查询。整个查询语句称为相关嵌套查询。求解时需反复求值。

2、带有比较运算符的子查询

指父查询与子查询之间用比较运算符进行连接。子查询返回单值时可以用比较运算符。

3、带有any或all的子查询

子查询返回多值时用ANY或ALL修饰符,而使用any或all谓词时则必须同时使用比较运算符。

在实际应用中,用聚集函数实现子查询通常比直接用any或all查询效率要高,any、all与聚集函数的对应关系如下表:

4、带有exists谓词的子查询

带有exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false_。由其引出的子查询的目标列表达式通常都用 *所有带IN谓词、比较运算符、ANY和ALL谓词的子查询都能用EXISTS谓词的子查询等价替换。

④集合查询

select语句的查询结果是元组的集合,所以多个select语句的结果可进行集合操作。主要包括并操作union、交操作intersect和差操作except。

⑤基于派生表的查询

子查询不仅可以出现在where子句,还可以出现在from子句,这时子查询生成的临时表成为主查询的查询对象。

注意派生表要指定属性列,但若子查询中没有聚集函数则可以不指定,子查询select子句后面的列名为其默认属性。

说明:通过from子句生成派生表,必须为派生关系指定一个别名! 

数据更新操作有三种:向表中添加若干行数据、修改表中的数据和删除表中的若干行数据。

1、插入数据:插入元组+插入子查询结果

into子句中没有出现的属性列,新元组在这些列上取空值,但在定义时not null的属性列不能取空值。如若into未指定属性列则要在每个属性列上均有值,空即为NULL。

字符串常数要用单引号(英文符号)括起来。

子查询可嵌套在insert语句中用以生成要插入的批量数据。(批量插入)

2、修改数据

where子句+条件,满足条件则修改该元组,若无where子句则修改表中所有元组。

子查询可嵌套在update语句中用以构造修改的条件。

3、删除数据

where子句+条件,满足条件则删除该元组,若无where子句则删除表中所有元组。

delete语句删除的是表中的数据,而不是关于表的定义。

子查询可嵌套在delete语句中,用以构造执行删除操作的条件。

关系数据库管理系统在执行增删改语句时会检查该操作是否破坏表上已定义的完整性规则:

视图:从一个或多个基本表中导出的表,视图是一个虚表,数据库中只存放视图的定义,视图中的数据仍然存储在原来的基本表中。一旦基本表数据发生变化,从视图查询到的数据也会随之变化。可以在视图上再创建一个视图。

视图的作用:

创建视图:CREATE VIEW <视图名> AS <子查询> [WITH CHECK OPTION];

删除视图:DROP VIEW <视图名>;

索引:为表提供多种存取路径,加快查找速度。xxx引类型有顺序文件上的索引、B+树索引、散列索引、位图索引等,在执行查询时系统会自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引。索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。建立索引能加快查询速度,一个表上可以有多个索引,表更新时,索引要进行维护,这会增加数据库负担,所以索引不能太多。

1、建立索引

create [unique] [cluster] index <索引名> on <表名> (<列名> [<排序方式>] [,(<列名> [<排序方式>] …]);

unique:表示索引的每个值只对应唯一的数据记录。cluster :表示该索引是聚簇索引。排序方式:ASC (升序),DESC(降序)聚簇索引:把一些元组集中存放在连续的物流块中,能显著减少访问磁盘的次数。一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。建立与维护聚簇的开销相关大。

2、修改索引

alter index <旧索引名> rename to <新索引名>;

3、删除索引

drop index <索引名>;

数据库总结 第14篇

为了保证事务的隔离性和一致性,DBMS需要对并发操作进行正确调度。

事务T1修改数据,T2读取数据,T1由于某种原因被撤销,则数据修改回原值,但T2读取的数据是之前修改的数据,即脏数据、不正确的数据。

事务T1读数据后,T2**修改**了数据,T1无法再现上一次读取的结果。

事务T1读数据后,T2**新增或者删除**了数据,T1无法再现上一次读取的结果。

悲观锁:封锁  乐观锁:版本号、时间戳

(读取)操作创建的锁。其他用户可以并发读取数据,但任何事物都不能获取数据上的排它锁,直到已释放所有共享锁。  若事务T对数据对象A加上S锁,则事务T只能读A;其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

若事物T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。它防止任何其它事务获取资源上的锁,直到在事务的末尾将资源上的原始锁释放为止。

用来预定要对此页施加X锁,它允许其他事务读,但不允许再xxx锁或X锁;当被读取的页将要被更新时,则升级为X锁;U锁一直到事务结束时才能被释放。

i>饥饿

考虑一台打印机分配的例子,当有多个进程需要打印文件时,系统按照短文件优先的策略排序,该策略具有平均等待时间短的优点,似乎非常合理,但当短文件打印任务源源不断时,长文件的打印任务将被无限期地推迟,导致饥饿以至饿死。

ii>活锁概念

与饥饿相关的另外一个概念称为活锁,在忙式等待条件下发生的饥饿,称为活锁。

a)忙式等待:不进入等待状态的等待。  b)阻塞式等待:进程得不到共享资源时将进入阻塞状态,让出CPU 给其他进程使用。  c)忙等待和阻塞式等待的相同之处:  在于进程都不具备继续向前推进的条件,不同之处在于处于忙等待的进程不主动放弃CPU,尽管CPU 可能被剥夺,因而是低效的;而处于阻塞状态的进程主动放弃CPU ,因而是高效的。

iii>举例

事务T1请求封锁R,T2请求封锁R,T3请求封锁R……  T1释放R之后,系统批准了T3的请求,然后是T4……请求,T2可能永远等待下去。(在整个过程中,事务T2 在不断的重复尝试获取锁R)。

iv>与死锁区别

活锁的时候,进程是不会阻塞的,这会导致耗尽CPU 资源,这是与死锁最明显的区别。  处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有一定几率解开,而死锁是无法解开的。

v>避免方式

采用先来先服务策略。

i>概念

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁。

ii>举例

T1请求封锁R1,T2请求封锁R2,然后T1又请求封锁R2,T1一直等待T2释放R2,此时,T2请求封锁R1,T2将一直等待T1释放R1。

iii>死锁原因

在数据库中,产生死锁的原因主要是:  两个或多个事务都已封锁了一些数据对象,然后又都请求其他事务已封锁的数据对象,从而出现死等待。

产生死锁的四个必要条件:  (1) 互斥条件:一个资源每次只能被一个进程使用。  (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。  (3) 不可剥夺条件: 进程已获得的资源,在末使用完之前,不能强行剥夺。  (4) 环路等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系。  只要系统发生了死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死  锁。

iv>死锁预防

预防死锁的发生只需破坏死锁产生的四个必要条件之一即可。  1) 破坏互斥条件  如果允许系统资源都能共享使用,则系统不会进入死锁状态。但有些资源根本不能同时访问,如打印机等临界资源只能互斥使用。所以,破坏互斥条件而预防死锁的方法不太可行,而且在有的场合应该保护这种互斥性。  2) 破坏不剥夺条件  当一个已保持了某些不可剥夺资源的进程,请求新的资源而得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着,一个进程已占有的资源会被暂时释放,或者说是被剥夺了,或从而破坏了不可剥夺条件。  该策略实现起来比较复杂,释放已获得的资源可能造成前一阶段工作的失效,反复地申请和释放资源会增加系统开销,降低系统吞吐量。这种方法常用于状态易于保存和恢复的资源,如CPU 的寄存器及内存资源,一般不能用于打印机之类的资源。  3) 破坏请求和保持条件  釆用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。一旦投入运行后,这些资源就一直归它所有,也不再提出其他资源请求,这样就可以保证系统不会发生死锁。  这种方式实现简单,但缺点也显而易见,系统资源被严重浪费,其中有些资源可能仅在运行初期或运行快结束时才使用,甚至根本不使用。而且还会导致“饥饿”现象,当由于个别资源长期被其他进程占用时,将致使等待该资源的进程迟迟不能开始运行。  4) 破坏环路等待条件  为了破坏循环等待条件,可釆用顺序资源分配法。首先给系统中的资源编号,规定每个进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri 的资源。  这种方法存在的问题是,编号必须相对稳定,这就限制了新类型设备的增加;尽管在为资源编号时已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使甩资源的顺序与系统规定顺序不同的情况,造成资源的浪费;此外,这种按规定次序申请资源的方法,也必然会给用户的编程带来麻烦。

都不好用,一般采用死锁的诊断和解除。

v>死锁的诊断和解除

a)超时法  如果一个事务等待时间超时,则认为发生死锁。(可能误判)  b)事务等待图法  事务等待图是一个有向图,反映了事务的等待情况。如果图中出现回路,就表示出现了死锁。

处理方案是:选择一个处理代价最小的事务,将其撤销并释放所有锁。  a) 从死锁进程处剥夺资源  b) 终止部分或全部进程

两段锁协议规定所有的事务应遵守的规则:  ① 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。  ② 在释放一个封锁之后,事务不再申请和获得其它任何封锁。  即事务的执行分为两个阶段:  第一阶段是获得封锁的阶段,称为扩展阶段。  第二阶段是释放封锁的阶段,称为收缩阶段。

定理:若所有事务均遵守两段锁协议,则这些事务的所有交叉调度都是可串行化的。  对于遵守两段协议的事务,其交叉并发操作的执行结果一定是正确的。值得注意的是,上述定理是充分条件,不是必要条件。一个可串行化的并发调度的所有事务并不一定都符合两段锁协议,存在不全是2PL的事务的可串行化的并发调度。  同时我们必须指出,遵循两段锁协议的事务有可能发生死锁。

此时事务T1 、T2同时处于扩展阶段,两个事务都坚持请求加锁对方已经占有的数据,导致死锁。  为此,又有了一次封锁法。一次封锁法要求事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。因此,一次封锁法遵守两段锁协议,但两段锁并不要求事务必须一次性将所有要使用的数据全部加锁,这一点与一次性封锁不同,这就是遵守两段锁协议仍可能发生死锁的原因所在。

数据库总结 第15篇

建立索引是加快查询速度的有效手段。  xxx立后,系统在存取数据时会自动选择合适的索引作为存取路径,用户不能显示的选择索引。

在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复。  MySQL 在处理主键约束以及唯一性约束时,考虑周全。数据库用户创建主键约束的同时, MySQL 自动创建主索引( primary index ),且索引名称为 Primary ;  数据库用户创建唯一性索引时, MySQL 自动创建唯一性索引( unique index ),默认情况下,索引名为唯一性索引的字段名。

在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中可以重复,不要求唯一。

i>概念

表中记录的物理顺序与键值的索引顺序相同。一个表只能有一个聚集索引。

ii>优缺点

优点:  查询速度快,因为一旦具有第一个索引值的记录被找到,具有连续索引值的记录也一定物理的紧跟其后。  缺点:  对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。在插入新记录时数据文件为了维持B+Tree 的特性而频繁的分裂调整,十分低效。

iii>聚集索引和非聚集索引的区别?

a) 聚集索引和非聚集索引的根本区别是表中记录的物理顺序和索引的排列顺序是否一致。  b) 聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。聚集索引的叶节点就是数据节点,而非聚集索引的叶节点仍然是索引节点。  c) 非聚集索引添加记录时,不会引起数据顺序的重组。

iii>场景

A.某列包含了小数目的不同值。  B.排序和范围查找。

基于多个字段而创建的索引就称为组合索引。

组合索引查询:最左前缀原则,即最xxx。  组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。只要组合索引最左边第一个字段出现在Where中,那么不管后面的字段出现与否或者出现顺序如何,MySQL引擎都会自动调用索引来优化查询效率。

增加了数据库的存储空间;  在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。

i>保证数据库每一行的唯一性

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

ii>加快数据的检索速度

这也是创建索引的最主要的原因。

iii>加速表和表之间的连接

特别是在实现数据的参考完整性方面特别有意义。

iv>减少查询中分组和排序的时间

在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

v>优化隐藏器

通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。  优化隐藏就是指在执行查询语句、使用多表连接检索或者指定查询语句操作的对象表时,明确地指出应该使用的查询方法、连接算法或者对表的操作方式。

应尽量避免全表扫描,首先应考虑在where 及order by ,group by 涉及的列上建立索引。

(假设在字段name上建立了索引):  i> 使用了运算符!=,以及关键字not in, not exist等,认为产生的结果集很大,往往导致引擎不走索引而是走全盘扫描  ii> 对索引字段使用了函数,如where substr(name, 1, 3)=‘mark’, 导致索引无效  iii> 使用like和通配符,第一个字符是%将导致索引失效,如where name like “%ark“ (如果是ark%,则可以利用索引)  iv> order by与索引  如果order by中的字段有建立索引,同时:  1、该字段没有出现在where中,则在排序的时候需要正常排序,默认order by是升序排序, 故索引没有对排序产生有利帮助 。  2、该字段同时同时出现在where中,则在获取记录后不进行排序,而是直接利用索引, 效率变高。如select a,b,c from T WHERE a='2015-10-25' ORDER BY a,b;

i>最左前缀匹配原则

xxxql 会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,范围查询会导致组合索引半生效。  比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,c 可以用到索引,d 是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d 的顺序可以任意调整。  where 范围查询要放在最后(这不绝对,但可以利用一部分索引)。  特别注意:and 之间的部分可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,xxxql 的查询优化器会帮你优化成索引可以识别的形式。  where 字句有or 出现还是会遍历全表。

ii>尽量选择区分度高的字段作为索引

表的某个字段值的离散度越高,该字段越适合选作索引的关键字。  主键字段以及唯一性约束字段适合选作索引的关键字,原因就是这些字段的值非常离散。尤其是在主键字段创建索引时, cardinality (基数,集的势)的值就等于该表的行数。  考虑列中值的分布,列的基数越大,索引的效果越好。

iii>不在索引列做运算或者使用函数

更新频繁的字段不适合创建索引,不会出现在 where 子句中的字段不应该创建索引。

iv>尽量扩展索引,不要新建索引。

比如表中已经有a 的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。

v>Where 子句中经常使用的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

vi>like 模糊查询中,只有右模糊使用索引

右模糊查询(321%)会使用索引,而%321 和%321%会放弃索引并使用全局扫描。

vii>占用存储空间少且较为固定的字段更适合选作索引

例如:  与字符串相比,整数字段占用的存储空间较少,因此,较为适合选作索引关键字。  与 text 类型的字段相比,char 类型的字段较为适合选作索引关键字。