数据库相关
数据库事务:一个程序执行单元
ACID特性:
atomicity原子性:事务的所有操作在数据库中要么全部反应,要么全部不反应
consistency一致性:隔离(无并发)执行事务时保持数据库的一致性
isolation隔离性:每个事务感觉不到其他事物在并发地执行
durability持久性:一个事务完成后,保证对数据库的修改是永久的
数据库查询优化:怎么做?建立索引,索引的类型?B+树和Hash? 有关排序用哪个?why?
数据库查询优化方面:
1 SQL查询语句的重写,对于一个查询可以用多种查询语句实现,但不同查询语句的数据库执行计划是不同的,一旦不能够使
用索引或造成较大的内存占用会导致性能下降,因此需要对查询语句进行重写优化,最典型的例子就是not in语句使用外连
接方式实现来进行优化
2 创建合理的索引结构,根据查询语句的中查询条件,在关系表上建立相应的索引,如B+树索引和hash索引
3 修改程序业务逻辑,有些功能如果使用SQL语句实现,不但SQL语句复杂,还将导致数据库的负担增加,因此可以将有些数据
操作的业务逻辑放到应用层进行实现,就是通过java编程实现
4 修改数据库服务器相关参数,优化服务器性能
索引:在数据库从用来加速对表的查询,通过使用快速路径访问方法定位数据,减少磁盘IO
与表独立存放,必须属于某个表,类似于书本的目录 用B+树或者是hash存储
索引的类型:
顺序索引:基于值的顺序排序
散列索引:由Hash函数决定一个值对应的地址
索引方法 当创建索引时指定索引类型,BTREE 或 HASH。
B+树:一百万的搜索码一次查询只要访问log50(1000 000)=4个结点,最多读4个磁盘块,一般是一个结点占一个磁盘块
Hash:搜索码到存储地址的映射
B+树:范围查询
Hash:等值查询 (包括= <> 和in)<>是不相等
in:测试元组是否是集合中的成员
select a from A
where a in (select a from B)
散列索引是根据HASH算法来构建的索引,所以检索速度很快,但不能范围查询。
Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高
B+树非叶节点中存放的关键码并不指示数据对象的地址指针,非也节点只是索引部分。所有的叶节点在同一层上,包含了全部关键码和相应数据对象的存放地址指针,且叶节点按关键码从小到大顺序链接。B+树的时候复杂度对某建成的树是固定的,一定要搜索到叶节点。
数据库并发,缓存机制的理解 用户1000个,数据库200个连接?。。。(应该是指要实现并发地执行SQL语句)
定义表索引的类型。
Normal NORMAL 索引是最基本的索引,并没有限制,如唯一性。
Unique UNIQUE 索引和 NORMAL 索引一样,只有一个差异 - 索引列的全部值必须只出现一次。
Full Text FULL TEXT 索引用于 MySQL 全文搜索。
数据库视图的概念:视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。可以将视图看成是一个移动的窗口 ,通过它可以看到感兴趣的数据。
存储过程和函数的区别
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
触发器:特殊的存储过程
给员工表增加一个触发器:员工表删除员工,自动将该条记录添加到退休员工表中
数据库中函数和存储过程的区别
先看一下存储过程和函数的定义。
存储过程: 存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。 存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1、可以在单个存储过程中执行一系列 SQL 语句。 2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。
用户定义函数: Microsoft SQL Server 2000 允许创建用户定义函数。与任何函数一样,用户定义函数是可返回值的例程。根据所返回值的类型,每个用户定义函数可分成以下三个类别: 1、返回可更新数据表的函数 如果用户定义函数包含单个 SELECT 语句且该语句可更新,则该函数返回的表格格式结果也可以更新。 2、返回不可更新数据表的函数 如果用户定义函数包含不止一个 SELECT 语句,或包含一个不可更新的 SELECT 语句,则该函数返回的表格格式结果也不可更新。 3、返回标量值的函数 用户定义函数可以返回标量值。
区别:
1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2.对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4.当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
注:sql语句执行的时候要先编译,然后执行。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程
存储过程
1. 功能强大,限制少 2. 不能直接引用返回值 3. 用select语句返回记录集
自定义函数
1. 诸多限制,有许多语句不能使用,许多功能不能实现 2. 可以直接引用返回值 3. 用表变量返回记录集