- 浏览: 508667 次
- 性别:
- 来自: 大连->北京
文章分类
最新评论
-
春天好:
写的很不错 推荐一个免费好用的云端爬虫开发平台不需要安装环境, ...
web爬虫 -
cpu88:
网络爬虫爬来爬去,网上信息可以瞬间扩散,但是也意味着,没有人愿 ...
web爬虫 -
biaoming:
牛。。学习了。。
MongoDB 关于索引的建议 -
biaoming:
楼主用mongo好早啊。
MongoDB 优化 -
biaoming:
好教程,学习了。。。
MongoDB 优化
聚簇索引并不是一个独立的索引类型。确切的说它们是存储数据的一个途径。在不同实现之间,还是有一些细节上的变化,但是InnoDB的聚簇索引实际是在相同的结构中把B-TREE索引和这些行一并的存储。
当一个表中有聚簇索引,它的行实际存储在索引的叶子的页(leaf pages)。“clustered”所指的意思是行的相邻键值彼此存储的非常近。你可能每张表只会有一个聚簇索引,因为你不能同时的在两个地方存储这些行。
因为存储引擎负责实现索引,因此并不是所有的存储引擎都支持聚簇索引。目前来说,solidDB和InnoDB支持。这部分我们重点放在InnoDB上,但是对于那些已经实现或者将要实现聚簇索引的引擎来说,在概念上至少有部分的正确。
下图展示了记录是怎样分布在聚簇索引上的。注意的是叶子的页(leaf pages)包含了整个行,但是节点的页仅仅包含了索引的列。这个例子中,索引列包含了整型值。
一些数据库服务器使你可以选择哪个索引可以聚簇,但是MySQL目前的存储引擎是不能那么做的。InnoDB通过主键来集中数据的。也就是说上图的索引列就是主键列。
如果你没有定义主键,InnoDB会选择一个唯一非空的索引来替代主键索引。如果没有这么个索引,InnoDB就会定义一个隐藏的主键。InnoDB仅仅在一个页中聚集数据。页所伴随的临近的键值可能彼此相互远离。
一个聚簇主键索引对性能有所帮助,但是也可能会导致严重的性能问题。因此,你应该仔细的思考聚簇,尤其是当你改变一个表的存储引擎从InnoDB转为其他的引擎。
聚簇数据有很多重要的优势。
- 能使相关联的数据距离很近。比如,当要实现一个mailbox,你可以通过user_id来聚簇,因此你能通过获取硬盘上一小部分的页来获得一个单独用户的所有消息。如果你不做聚簇,那么每个消息可能都需要各自的硬盘I/O。
- 数据访问更加快速。一个聚簇索引在B-TREE上即保存了索引也保存了数据。因此从聚集索引获取行一般要快于在非聚集索引中比较查找。
- 使用覆盖索引的语句可以使用包含在叶子节点的主键值。
- 聚簇会大幅提高IO限制(IO-BOUND)工作量。如果数据在内存中的顺序对数据的访问并不是什么问题的话,聚簇就不能带来那么多好处了。
- 插入的顺序影响插入的速度。按照主键的速度插入行是最快的读入数据到InnoDB表的方法。如果你没有依照主键的顺序来读取数据,那么在读取很多数据之后,使用OPTIMIZE TABLE来重新组织表是个很好的主意。
- 更新聚簇索引的列消耗是非常高的。因为它迫使InnoDB把每一行移动到新的位置。
- 当新的一行插入或行的主键更新,这样会导致聚簇索引的页的分裂。当一个行的键值决定了该行以及它所有的数据一定要放在一页里的时候,页的分裂就发生了。因为存储引擎必须把页分为两个来容纳这个行。页的分裂会导致表占用更多的空间。
- 聚簇的表会降低检索整张表的速度。尤其是在由于页的分裂,造成行没有被压缩或者没有连续的存储的情况下,问题就很严重。
- 非聚簇索引可能比你所想像的要大很多。因为它们的叶子节点包含了它们引用行的主键列。
- 非聚簇索引的访问需要两个索引的查找。
最后的一条可能有些困惑,为什么非聚簇索引需要两次索引的查找?答案就隐藏在非聚簇索引所存储的“行指针”上。记住一个叶子节点存储的指针并不是引用行的物理地址,而是存储了行的主键值。
意思就是从非聚簇索引中查找一行,首先,存储引擎会在非聚簇索引找到叶子节点并且之后只用它所存储的主键值找到主键并且找到这个行。这是个双重工作:两个B-TREE的导航。
InnoDB和MyISAM数据布局的比较
聚簇和非聚簇数据的布局并且在它们之间不同的交互都让我们很困惑和吃惊。让我们看看InnoDB和MyISAM在下列表中是怎样布局的。
CREATE TABLE layout_test (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY(col1),
KEY(col2)
);
假使这张表的的主键数据为1到1000,并且随即的插入它们,之后再用optimize table来进行优化。也就是说数据最佳的分布在硬盘上,但是行可能是随机的顺序。col2的值在1到100随机的赋值。因此有许多重复。
MyISAM数据布局
MyISAM数据布局还是相对来说简单一些。所以我们先说说它。MyISAM在硬盘中是按照插入的顺序来存储的。图如下
我们发现行的数是从0开始的。因为行是定长的,因此MyISAM会通过从表的开始部分查找所需要的字节数来找到任意的行。
这种布局很容易创建索引。我们用抽象过的图来举例。每个叶子节点都包含了行的数字。来看看表主键的索引图
我们忽略了一些细节的问题,比如多少个B-TREE节点层级,但是这并不会影响我们理解在非聚簇索引引擎的基本数据布局。
那么col2是什么样子的?和上面的有什么区别?。其实没有任何区别。和其他索引也一样。
发表评论
-
查询性能的优化 - 语句执行的基础 - 查询优化的过程 (一)
2010-01-20 12:00 3509在语句生命周期的下一步就是把一个SQL查询放入一个可执行 ... -
查询性能的优化 - 语句执行的基础 - 已缓存的查询语句
2009-12-01 09:58 1227在解析一个查询之前,如果缓存开启,MySQL要检查它的缓存。这 ... -
查询性能的优化 - 语句执行的基础 - MySQL 客户端/服务端 协议
2009-12-01 01:25 1960MySQL 客户端/服务端 协 ... -
查询性能的优化 - 语句执行的基础
2009-11-30 00:36 1052如果你想从MySQL服务器获得很高的性能,建议你花费一定的时间 ... -
查询性能的优化 - 重新构建查询的方法 - 分解JOIN查询
2009-11-29 11:54 1867分解JOIN查询 许多高性能的网站都分解了JOIN查询。你可 ... -
查询性能的优化 - 重新构建查询的方法 - 拆分一个查询语句
2009-11-28 23:17 1533拆分一个查询语句 另一个分解查询的方法是分步解决。本质上来 ... -
查询性能的优化 - 重新构建查询的方法 - 复杂查询VS多个查询语句
2009-11-28 01:32 1555当开始优化有问题的查 ... -
查询性能的优化 - 查询慢的基础知识:优化数据访问
2009-08-19 14:50 1682一个查询执行的不是 ... -
查询性能的优化 - 前言
2009-08-12 16:49 1030上一章,我们解释了怎样优化schema.这是高性能的一个必要条 ... -
Schema的优化和索引 - 关于存储引擎的简单记录
2009-08-12 15:26 1106这一章的结束,我们来说一下关于设计模型的存储引擎的选择,这些你 ... -
Schema的优化和索引 - 加速ALTER TABLE
2009-08-12 14:02 1882当对于一个大表进行ALTER TABLE的时候,性能问题就产生 ... -
Schema的优化和索引 - 范式和非范式
2009-08-12 11:35 1731有很多方法来展现给定的数据。从完全范式到完全的非范式以及介于两 ... -
Schema的优化和索引 - 索引和表的维护
2009-08-10 15:38 1463当你已经创建了一张表 ... -
Schema的优化和索引 - 学习一个索引示例
2009-08-06 14:09 1152用例子来理解索引的概 ... -
Schema的优化和索引 - 高性能的索引策略 - 索引和锁
2009-07-31 15:48 1054InnoDB中,索引所扮演的角色是非常重要的。因为它们可以能让 ... -
Schema的优化和索引 - 高性能的索引策略 - 冗余和重复的索引
2009-07-31 11:37 2102MySQL可以在一个列上创建多个索引;这么做并不会提醒和防止发 ... -
Schema的优化和索引 - 高性能的索引策略 - 压缩索引(Packed Indexes)
2009-07-30 21:30 1458MyISAM使用前缀压缩来降低索引的大小,这样就可以把更多的索 ... -
Schema的优化和索引 - 高性能的索引策略 - 使用索引扫描来进行排序
2009-07-28 10:43 2239MySQL有两种方法生成有序的结果:使用文件排序或者按顺序的扫 ... -
Schema的优化和索引 - 高性能的索引策略 - 覆盖索引(Covering Indexes)
2009-07-22 15:25 2617索引是高效找到行的一 ... -
Schema的优化和索引 - 高性能的索引策略 - 前缀索引和索引的选择性
2009-07-13 22:32 1815有的时候你可能需要索 ...
相关推荐
mvn install:install-file -DgroupId=io.confluent -DartifactId=kafka-schema-registry-client -Dversion=6.2.2 -Dfile=/root/kafka-schema-registry-client-6.2.2.jar -Dpackaging=jar 官网下载地址 packages....
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:jsonschema-4.0.0a1-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
4. **模式组合**:JSON Schema支持多种模式组合,如`allOf`、`anyOf`、`oneOf`和`not`,`json-schema-inferrer`能够处理这些复杂的组合模式,从多个JSON实例中提取共同的模式或者识别出不同的模式。 5. **自定义...
kafka-schema-registry-client-3.2.0.jar包,亲测可用,在aliyun仓库内找不到,可以下载此jar包来进行手动安装
kafka-schema-registry-client-3.3.1.jar包,在aliyun 仓库内无法下载,可以下载此jar包然后手动安装
xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar;xmlschema-core-2.0.3.jar
赠送jar包:springfox-schema-2.7.0.jar; 赠送原API文档:springfox-schema-2.7.0-javadoc.jar; 赠送源代码:springfox-schema-2.7.0-sources.jar; 赠送Maven依赖信息文件:springfox-schema-2.7.0.pom; 包含...
kafka-schema-registry-client.jar,kafka客户端所需的jar包,maven中已经找不到,所以将自己本地的分享出来。
您可以使用 AWS Schema Conversion Tool (AWS SCT) 将现有的数据库架构从一个数据库引擎转换为另一个数据库引擎。您可以转换关系 OLTP 架构或数据仓库架构。转换后的架构适用于 Amazon Relational Database Service ...
如果是maven依赖,可以在pom.xml中引入以下配置 <groupId>org.apache.ws.xmlschema <artifactId>xmlschema-core <version>2.2.1 </dependency>
赠送jar包:springfox-schema-2.4.0.jar; 赠送原API文档:springfox-schema-2.4.0-javadoc.jar; 赠送源代码:springfox-schema-2.4.0-sources.jar; 包含翻译后的API文档:springfox-schema-2.4.0-javadoc-API...
cxf jar xmlschema-core-2.0.jar
在本次讨论中,我们关注的是名为`tableschema-elasticsearch-0.3.0.tar.gz`的压缩包,它源自PyPI官网,主要用于连接和操作Elasticsearch数据库,以实现高效的数据管理和检索。 Elasticsearch,作为一款强大的开源...
性能监控和调优工具,如MySQL的Performance Schema和InnoDB Monitor,帮助识别性能瓶颈并优化数据库设置。 数据库连接字符串是用于连接数据库的应用程序配置,包含数据库地址、端口、用户名、密码等信息。 视图的...
赠送jar包:springfox-schema-3.0.0.jar; 赠送原API文档:springfox-schema-3.0.0-javadoc.jar; 赠送源代码:springfox-schema-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-schema-3.0.0.pom; 包含...
hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema最新源代码hive-json-schema...
赠送jar包:springfox-schema-2.7.0.jar; 赠送原API文档:springfox-schema-2.7.0-javadoc.jar; 赠送源代码:springfox-schema-2.7.0-sources.jar; 赠送Maven依赖信息文件:springfox-schema-2.7.0.pom; 包含...
赠送jar包:springfox-schema-3.0.0.jar; 赠送原API文档:springfox-schema-3.0.0-javadoc.jar; 赠送源代码:springfox-schema-3.0.0-sources.jar; 赠送Maven依赖信息文件:springfox-schema-3.0.0.pom; 包含...
5. **性能优化**:虽然JSON Schema验证可能涉及复杂的递归和规则检查,但`json-schema-validator`通过缓存和优化验证过程,确保了良好的性能。 在实际使用中,首先需要将`json-schema-validator`库添加到项目依赖中...
赠送jar包:springfox-schema-2.9.2.jar; 赠送原API文档:springfox-schema-2.9.2-javadoc.jar; 赠送源代码:springfox-schema-2.9.2-sources.jar; 赠送Maven依赖信息文件:springfox-schema-2.9.2.pom; 包含...