首页 > 编程知识 正文

mysql数据库之索引规约(mysql索引和约束)

时间:2023-12-23 11:38:06 阅读:319267 作者:KPFS

本文目录一览:

阿里巴巴用java技术可以创造什么利益?

阿里巴巴就是编程起家,阿里还写了Java手册,你这边也可以看看。

《阿里巴巴Java开发手册》的愿景是码出高效,码出质量。它结合作者的开发经验和架构历程,提炼阿里巴巴集团技术团队的集体编程经验和软件设计智慧,浓缩成为立体的编程规范和最佳实践。众所周知,现代软件行业的高速发展对开发者的综合素质要求越来越高,因为不仅是编程相关的知识点,其他维度的知识点也会影响软件的最终交付质量,比如,数据库的表结构和索引设计缺陷可能带来软件的架构缺陷或性能风险;单元测试的失位导致集成测试困难;没有鉴权的漏洞代码易被黑客攻击等。所以,本手册以开发者为中心视角,划分为编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七个维度,每个条目下有相应的扩展解释和说明,正例和反例,全面、立体、形象地帮助到开发者的成长和团队代码规约文化的形成。

从严格意义上讲,《阿里巴巴Java开发手册》超越了Java语言本身,明确作为一名合格开发者应该具备的基本素质,因此本手册适合计算机相关行业的管理者和研发人员、高等院校的计算机专业师生、求职者等阅读,希望成为大家如良师益友般的工作手册、工具字典和床头书。

编辑推荐

1.从编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七大维度,诠释编程规范和最佳实践!

2.受到毕玄、多隆大神高度认可!并获得社区及Java爱好者支持!

3.阿里巴巴集体技术团队的集体编程经验和软件设计智慧的结晶!

索引到底是什么?

他加快主要是靠另外建了个树,专门用来定位。

关键字其实就是一种唯一索引。

参考一下

innodb 中文参考手册 --- 犬犬(心帆)翻译 11 表和索引结构

mysql 在数据库目录下的 .frm 文件中存储它的数据字典信息。但是每个 innodb 类型表也同样在 innodb 表空间内的内部的数据字典中存在它自己的进入点。当 mysql 移除(drop) 一个表或一个数据库时,它将同时删除 .frm 文件,以及在 innodb 的数据字典中相对应的进入点。这就是为什么不能通过简单的删除 .frm 文件为移除数据库中的 innodb 类型表的原因,以及为什么在 mysql 版本 = 3.23.43 的版本中,drop database 不能用于 innodb 表的原因。

每一个 innodb 表都有一个被称为聚簇索引的特殊索引用于保存记录行信息。如果一个表定义一个 primary key ,那么主键的索引就是聚簇索引。

如果表没有定义一个 primary key ,mysql 将选出第一个 not null 字段的 unique 键做为主键,innodb 也将用这个键的索引做为聚簇索引。如果表中没有这样的键,innodb 将在内部产生一个聚簇索引,它是由按 innodb 分配给它们的 row id 顺序排序的记录行组成。这个 row id 是一个单调地增加并插入新行的 6-byte 字段。因而由 row id 排序的记录顺序也就是插入时的物理顺序。

通过聚簇索引访问一个记录行是非常快的,因为记录行数据与引导我们查找到它的索引在同一个页面上。 在大多数的数据库系统中记录行数据与索引记录通常并不是放在同一个页面上的。如果一个表太大了,那么聚簇索引体系通常比传统的方式更能减少磁盘 i/o 。

在非-聚簇索引(non-clustered indexes)中的记录 (我们通常称它为辅助索引secondary indexes),在 innodb 中会为这行包含主键值。innodb 将使用这个主键值来在聚簇索引中查找这行。注意如果主键太长,那么辅助索引将会占用更多的空间。

innodb 在比较不同长度的 char 和 varchar 时,较短字串的多余长度将被空格(spaces)填充。

11.1 索引的物理结构

all indexes in innodb 中所有的索引是索引记录存放在树的叶页面(leaf pages)上的 b-trees。一个索引页面的大小默认为 16 kb。当新的记录被插入时,innodb 将试图为将来的插入与更新索引记录保留页面的 1 / 16 空余。

如果索引记录以一个连续的 (升序或降序) 被插入,那么索引页面的将会被使用约 15/16 。如果以一个随机的顺序插入,那么页面大约使用了 1/2 - 15/16 。如果一个索引页面被撤销(drop)地低于 1/2,那么 innodb 将缩短索引树并释放页面空间。

11.2 插入缓冲

主键是一个唯一标识符,新的记录以主键的升序被插入,这在数据库系统中是一个普遍的情形。因而在聚簇索引内插入的值不需要在硬盘上随意读取。

另一方面,辅助索引通常是非唯一的(non-unique),插入在辅助索引中是相当随意的顺序。如果在 innodb 中不使用一个特殊的机制这将会引起大量随机的磁盘 i/o。

如果一个索引记录被插入到一个非唯一的辅助索引中去,innodb 将检查辅助索引页面是否已在缓冲池(buffer pool)中。在这种情形下,innodb 直接地将它插入到索引页面中去。但是,如果在缓冲池中没有发现索引页面,inndb 将索引记录插入到一个特殊的插入缓冲结构中去。插入缓冲被控制地如些小以至于可以完全放在缓冲池中, 因而插入速度很快。

插入缓冲会定时地归并到数据库中的辅助索引树中去。为了减少磁盘 i/o,通常将同一个页面上的几个插入同时归并到索引树上。插入缓冲可以提高向一个表中插入速度 15倍。

11.3 适应性的散列索引 (adaptive hash indexes)

如果一个数据库几乎占满了所有主同存,那么在其上运行查询的一个快捷之路就是使用散列索引(hash indexes)。innodb 有一个用于监视在表定义的索引上的索引搜索动作的自动调整结构,如果 innodb 发现一个散列索引对查询有益,那么它将自动地建造这个散列索引。

但是要注意地就是散列索引通常是基于表中已存在的 b-tree 创建的。innodb 可能通过 b-tree 中定义的任何长度的键的前缀来构建散列索引,这依赖于 innodb 观察 b-tree 上索引的模式。一个散列索引可以是部分的:它在缓冲池中并不需要有整个 b-tree 索引的高速缓冲。innodb 按照需要来为经常访问的索引页面构建散列索引。

在理论上,通过这个适应性的散列索引机制,innpdb 使它自己更适合于大的主存(ample main memory),更接近于主存储器数据库系统体系(the architecture of main memory databases)。

11.4 记录的物理结构 innodb 中每个索引记录都包含一个 6 字节的头。这个头部用于联连相连贯的记录,也同样用于行锁定。 聚簇索引中的记录包含了所有用户定义的字段。另外,有一个 6-byte 字段用于记录事务 id(transaction id)和一个 7-byte 字段用于行指针(roll pointer)。 在一个表中,如果用户没有定义一个主键,那么每个聚簇索引记录包含一个 6-byte 的行 id 字段(row id field)。 每个辅助索引记录包含为聚簇索引键定义的所有字段。 一个索引包含着一个指向对应字段记录的指针。如果一个记录的所有字段总长度 128 bytes,那么这个指针为 1 byte,否则为 2 bytes。 innodb 在内部也是以一个固定长度来存储定长的字符型字段,比如 char(10)。对于 varchar 型字段,innodb 将截去结尾的空间。注意,mysql 可能内部地将 char 转换为 varchar。查看 mysql 用户手册有关“列规约的默认地改变”( silent column specification changes)。 如果存储一个变长的字段,一个 sql null 为一个 0 bytes 被存储,但是如果是一个定长字段将以固定的长度被存储。以相应的 nulls 存储定长的空间的目的地就在于在将 null 字段值更新为 非 null 的值时不至产生索引页面的磁盘碎片。

文章整理:西部数码--专业提供域名注册、虚拟主机服务

以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

大数据分析一般用什么工具分析

 一、hadoop

Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

Hadoop带有用 Java 语言编写的框架,因此运行在 Linux 生产平台上是非常理想的。Hadoop 上的应用程序也可以使用其他语言编写,比如 C++。

二、HPCC

HPCC,High Performance Computing and Communications(高性能计算与通信)的缩写。1993年,由美国科学、工程、技术联邦协调理事会向国会提交了“重大挑战项目:高性能计算与 通信”的报告,也就是被称为HPCC计划的报告,即美国总统科学战略项目,其目的是通过加强研究与开发解决一批重要的科学与技术挑战问题。HPCC是美国实施信息高速公路而上实施的计划,该计划的实施将耗资百亿美元,其主要目标要达到:开发可扩展的计算系统及相关软件,以支持太位级网络传输性能,开发千兆 比特网络技术,扩展研究和教育机构及网络连接能力。

三、Storm

Storm是自由的开源软件,一个分布式的、容错的实时计算系统。Storm可以非常可靠的处理庞大的数据流,用于处理Hadoop的批量数据。Storm很简单,支持许多种编程语言,使用起来非常有趣。Storm由Twitter开源而来,其它知名的应用企业包括Groupon、淘宝、支付宝、阿里巴巴、乐元素、 Admaster等等。

Storm有许多应用领域:实时分析、在线机器学习、不停顿的计算、分布式RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务)、 ETL(Extraction-Transformation-Loading的缩写,即数据抽取、转换和加载)等等。Storm的处理速度惊人:经测 试,每个节点每秒钟可以处理100万个数据元组。Storm是可扩展、容错,很容易设置和操作。

四、Apache Drill

为了帮助企业用户寻找更为有效、加快Hadoop数据查询的方法,Apache软件基金会近日发起了一项名为“Drill”的开源项目。Apache Drill 实现了 Google's Dremel。该项目将会创建出开源版本的谷歌Dremel Hadoop工具(谷歌使用该工具来为Hadoop数据分析工具的互联网应用提速)。而“Drill”将有助于Hadoop用户实现更快查询海量数据集的目的。

通过开发“Drill”Apache开源项目,组织机构将有望建立Drill所属的API接口和灵活强大的体系架构,从而帮助支持广泛的数据源、数据格式和查询语言。

五、RapidMiner

RapidMiner是世界领先的数据挖掘解决方案,在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛,包括各种数据艺术,能简化数据挖掘过程的设计和评价。

六、 Pentaho BI

Pentaho BI 平台不同于传统的BI 产品,它是一个以流程为中心的,面向解决方案(Solution)的框架。其目的在于将一系列企业级BI产品、开源软件、API等等组件集成起来,方便商务智能应用的开发。它的出现,使得一系列的面向商务智能的独立产品如Jfree、Quartz等等,能够集成在一起,构成一项项复杂的、完整的商务智能解决方案。

Pentaho BI 平台构建于服务器,引擎和组件的基础之上。这些提供了系统的J2EE 服务器,安全,portal,工作流,规则引擎,图表,协作,内容管理,数据集成,分析和建模功能。这些组件的大部分是基于标准的,可使用其他产品替换之。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。