企业工资福利社会保障系统毕业设计(论文) 联系客服

发布时间 : 星期六 文章企业工资福利社会保障系统毕业设计(论文)更新完毕开始阅读

BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继 EXAMPLE存储引擎是一个不做任何事情的存根引擎。它的目的是作为MySQL源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE存储引擎不支持编索引。另外,Mysql的存储引擎接口定义良好。有兴趣的开发者可以通过阅读文档编写自己的存储引擎。

索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引不是万能的,索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。另外,索引还会在硬盘上占用相当大的空间。因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。

1.InnoDB数据表的索引

与InnoDB数据表相比,在InnoDB数据表上,索引对InnoDB数据表的重要性要大得多。在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。

2.限制

如果WHERE子句的查询条件里有不等号( WHERE coloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。

如果WHERE子句的查询条件里使用比较操作符LIKE和REGEXP,MySQL只有在搜索模板的第一个字符不是通配符的情况下才能使用索引。比如说,如果查询条件是LIKE'abc%',MySQL将使用索引;如果查询条件是LIKE'?c',MySQL将不使用索引。

在ORDERBY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引。(虽然如此,在涉及多个数据表查询里,即使有索引可用,那些索引在加

13

快ORDERBY方面也没什么作用)。如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。

只有当数据库里已经有了足够多的测试数据时,它的性能测试结果才有实际参考价值。如果在测试数据库里只有几百条数据记录,它们往往在执行完第一条查询命令之后就被全部加载到内存里,这将使后续的查询命令都执行得非常快--不管有没有使用索引。只有当数据库里的记录超过了1000条数据总量也超过了MySQL服务器上的内存总量时,数据库的性能测试结果才有意义。在不确定应该在哪些数据列上创建索引的时候,人们从EXPLAINSELECT命令那里往往可以获得一些帮助。这其实只是简单地给一条普通的SELECT命令加一个EXPLAIN关键字作为前缀而已。有了这个关键字,MySQL将不是去执行那条SELECT命令,而是去对它进行分析。MySQL将以表格的形式把查询的执行过程和用到的索引等信息列出来。在EXPLAIN命令的输出结果里,第1列是从数据库读取的数据表的名字,它们按被读取的先后顺序排列。type列指定了本数据表与其它数据表之间的关联关系(JOIN)。在各种类型的关联关系当中,效率最高的是system,然后依次是const、eq_ref、ref、range、index和All(All的意思是:对应于上一级数据表里的每一条记录,这个数据表里的所有记录都必须被读取一遍——这种情况往往可以用一索引来避免)。possible_keys 数据列给出了MySQL在搜索数据记录时可选用的各个索引。key数据列是MySQL实际选用的索引,这个索引按字节计算的长度在key_len数据列里给出。比如说,对于一个INTEGER数据列的索引,这个字节长度将是4。如果用到了复合索引,在key_len数据列里还可以看到MySQL具体使用了它的哪些部分。作为一般规律,key_len数据列里的值越小越好。Ref 数据列给出了关联关系中另一个数据表里的数据列的名字。row数据列是MySQL在执行这个查询时预计会从这个数据表里读出的数据行的个数。row数据列里的所有数字的乘积可以大致了解这个查询需要处理多少组合。最后,extra数据列提供了与JOIN操作有关的更多信息,比如说,如果MySQL在执行这个查询时必须创建一个临时数据表,就会在extra列看到usingtemporary字样。

在为CHAR和VARCHAR类型的数据列定义索引时,可以把索引的长度限制为一个给定的字符个数(这个数字必须小于这个字段所允许的最大字符个数)。这么做的好处是可以生成一个尺寸比较小、检索速度却比较快的索引文件。在绝大多数应用里,数据库中的字符串数据大都以各种各样的名字为主,把索引的长度设置为10~15个字符已经足以把搜索范围缩小到很少的几条数据记录了。在为BLOB和TEXT类型的数据列创建索引时,必须对索引的长度做出限制;MySQL所允许的最大索引全文索引文本字段上的普通索引只能加快对出现在字段内容最前面的字符串(也就是字段内容开头的字符)进行检索操作。如果字段里存放的是由几个、甚至是多个单词构成的较大段文字,普通索引就没什么作用了。这种检索往往以的形式出现,这对MySQL来说很复杂,如

14

果需要处理的数据量很大,响应时间就会很长。

大部分当今应用的心脏就是底层数据库。在这种情况下,刻不容缓的设计和执行关键业务应用的数据结构是非常重要。

所有具有良好建模的工具,比如像MySQL workbench都支持正向工程,意味着所有使用的SQL代码能创建数据库,并也能自动书写相关的对象及正确运行。这个消除了开发人员或数据库管理员容易出错或耗时的过程。

数据设计及其响应的数据库有版本控制和生命周期管理,像应用程序一样,所以,最重要的就是数据架构师、数据库管理员、开发人员。

要了解为他们的数据库和元数据设计执行合适的变更管理需求。链接到某些信息库形式的模型驱动方法是最佳的,但获取数据建模和元数据对象的手动方法也是可以运行的。

在变更管理中,也许面对数据管理专业人员所面临最严峻挑战之一就是在已有的物理数据库设计中成功执行那些复杂的变化。

幸运的是,大部分良好建模工具,如MySQL workbench能缓解这类问题,因为它们包含同步效率,以允许数据库管理员或开发人员对物理数据建模进行更改,然后用已有的物理数据库来同步这些变化。该工具目前是对所有执行影响分析或生成合适的数据库代码的一切工作,在对目标数据库执行之前,容易预览所有的变更。

在大多数的工具中,逆向工程也是可以做得非常好的--可以修改一个数据建模,以反映对已有物理数据库做的变更。 这一方面是非常重要的,因为往往需要对数据库执行紧急变更,但是如果对变更管理或逆向工程使用建模,他们需要执行更新以反映目前的IT基础设施。

应用程序包装/购买对于数据转移人员或应用开发人员了解以何种形式来使用底层数据库往往时非常困难的黑匣子,此外,对应用程序包应作出加强或其他修改,更重要的是要了解这些变化影响,并确保他们是正确的。

对应用程序管理包的模型驱动方法可以大大简化这一过程。建模是可视化了解数据关系和复杂数据库结构定义的一种非常完美的方法。通过逆向工程工具,很快可以发现几乎所有良好的建模工具,数据库管理与或开发者他们能快速地可视化他们应用程序包数据库的内部运作,并理解数据库是如何使用的。应需要作出对数据库进行修改或添加操作,建模工具能生成分析变更影响或生成代码。

当今企业有非常多的用于抓取或维护数据的消费者。其中一些人可能是技术型用户,但可能其中许多不是,因此,如何更好的教育与沟通方式来存取数据是一个巨大挑战。

此外,在大型开发团队中他们使用的数据结构都是一样的。他们经常需要了解他们如何在自己的应用中进行编码,以便它是合适的去访问目标数据库。

再次,模型对于技术或非技术人员而言,它是一种完美的方法来了解数据是如何进

15

行定义的,或如何进行访问的。像MySQL workbench如此良好的建模工具能帮助他们提供创建建模和导出建模图片。也能创建基于网络或基于文本形式的报告来转换大型建模成易读的表格形式的报告格式。

大连交通大学信息工程学院

毕业设计(论文)调研报告

学生姓名 罗旭 专业班级 计算机08-2班

指导教师 王影 魏琦 职 称 高工 讲师

所在单位 信息科学系计算机教研室

教研室主任 宋丽芳

16