`
annan211
  • 浏览: 462806 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

mysql高级特性之数据分区

阅读更多

mysql高级特性
  1 以存储引擎的角度分析,分区表和物理表没有区别。是按照一定的规则将数据分别存储的逻辑设计。器底层是由多个物理字表组成。
  
  2 分区的原理
     分区表由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们可以直接访问各个分区。存储引擎管理分区的各个底层
	 表和管理普通表一样(所有底层表都必须使用相同的存储引擎),分区表的索引只是在各个底层表上各自加上一个完全相同的索引。
	 从存储引擎角度来看,底层表和一个普通表没有任何的不同,存储引擎也无需知道这是一个普通表还是一个分区表。
	 在分区表中 索引已经失去作用,添加索引只会增加服务器的负担。如果发现某一些索引仍会起作用那也只是短暂的
	 回光返照。随着数据规模的增加,这些索引必然会成为负担。
	 
  3 分区表的类型
    1 根据范围进行分区
	2 根据实践间隔分区
	3 	mysql还支持键值、哈希、列表分区,这其中还支持子分区。
	4 还可以根据数学模函数来进行分区。
	

  4 如何使用分区表
    在分区表中,索引在空间和维护上的消耗巨大,尤其是当表非常大的时候,特别不希望使用索引,即使真的使用索引,你会
	发现数据并不是按照想要的方式聚集的,而且会有大量的碎片产生,最终会导致一个查询产生成千上万的随机IO,应用
	程序也随之僵死。有时候也可以通过一两个索引解决一些问题,不过多数情况下,索引不会有任何作用,这时候有两条路可选:
	让所有的查询都只在数据表上做顺序扫描,或者将数据表和索引全部都缓存在内存中。
	
	这里需要再陈述一遍,在数据量超大的时候,B-Tree索引就无法起作用了。除非是索引覆盖查询,否则数据库服务器
	需要根据索引扫描的结果回表查询所有符合条件的记录,如果数据量巨大,这将产生大量随机IO,随之,数据库的响应时间
	将大到不可接受。另外,索引维护(磁盘空间、IO操作)的代价也非常高。
	
	这正是分区所要做的事情。理解分区时还可以将其当做索引的最初形态,以待价非常小的方式定位到需要的数据在那一片区域。
	在这片区域中,你可以做顺序扫描,可以建索引,还可以将数据都缓存到内存等。因为分区无需额外的数据结构记录每个
	分区有哪些数据,分区不需要精确定位每条数据的位置,也就无需额外的数据结构,只需要一个简单的表达式就可以表达每个分区
	存放的是什么数据。
	
	为了保证大数据量的可扩展性,一般有下面两个策略:
	
	全量扫描数据,不需要任何索引。
	 可以使用简单的分区方式存放表,不需要任何索引,根据分区的规则大致定位需要的数据位置。只要能够使用where条件,将需要的数据限制在少数分区
	 中,则效率是非常高的。使用该策略假设不用将数据完全放入到内存中,同时还假设需要的数据全都在磁盘上,因为内存相对很小
	 数据很快会被挤出内存,所以缓存起不了任何作用。这个策略适用于以正常的方式访问大量数据的时候。
	 
	索引数据,并分离热点。
	  如果某部分数据有明显的热点,而且除了这部分数据,其他数据很少被访问到,那么可以将这部分热点数据单独放在一个分区中,
	  让这个分区的数据能够有机会都缓存在内存中。这样查询就可以只访问一个很小的分区表,能够使用索引,也能够有效的使用缓存。
	  
   5 分区的陷阱
     前面介绍的分区策略都基于两个非常重要的假设:查询都能够过滤掉很多额外的分区、分区本身不会带来很多额外的代价。
    事实是这两个假设在某些场景下会有问题。
	
	1)null值会使分区过滤无效
	  mysql分区时会创建第一个分区,用于存放分区列为null 或非法的记录。
	  例如 按照 partition by year(order_date) 来分区,那么order_date为null 或者是一个非法的值得时候,
	  记录都会被放入第一个分区。假设存在下面的查询 where order_date between 2012-09-08 and 2012-08-07
	  那么这个查询会检查2012这个分区,同时他还会检查第一个分区,检查第一个分区是因为year接受的参数
	  可能是null或者非法数值,如果是Null或者非法的话就会被放入第一个分区。
	  
	  同时,如果第一个分区非常大,特别是使用 全量扫描数据,不使用索引的策略时,代价会非常大。
	  
	  为了避免这种情况,我们可以创建一个无用的第一个分区,例如上面的例子可以使用
	  partition p_nulls values less than (0) 来创建第一个分区,如果插入的数据都是有效的,那么
	  第一个分区就是空的,即使需要检测第一个分区,代价也会非常小。
	  
	  在mysql 5.5就不需要这个技巧了,因为可以直接使用列本身而不是基于列的函数进行分区。
	  partition by range columns(order_date).
	  
	 2) 分区列和索引列不匹配
	    如果定义的索引咧和分区列不匹配,会导致查询无法进行分区过滤。假如在b列上建立索引	,在a列上进行分区。
		因为每个分区都有其独立的索引,所以扫描列a上的索引就需要扫描每一个分区内对应的索引。要避免这种情况,就要避免建立和分区不匹配的索引,除非查询中还同时包含了可以过滤分区的条件。
	  
	 3) 选择分区的成本可能很高
	    对于使用范围来分区的情况来说,查询的成本可能会非常高。这一行属于哪个分区,这些符合查询条件的行分布在那些区
		找到这样的回答的代价可能会非常高。随着分区数的增长,成本会越来越高。
		在按行写入大量数据的时候,每写入一行数据到范围分区的表时,都需要扫描分区定义列表来找到合适的分区。
		
		可以通过限制分区的数量来缓解这类问题,对于大多数系统来说100个分区是没有问题的。
		其他的分区类型,比如键分区和哈希分区,则没有这样的问题。
		
	 4) 打开并锁住所有底层表的成本可能很高
	    当查询访问分区表的时候,mysql需要打开并锁住所有的底层表,这是分区表的另一个开销。这个操作在分区过滤之前发生,所以无法通过分区过滤
		降低此开销,并且该开销也和分区类型无关,会影响所有的查询。这一点对于一些本身操作非常快的查询,比如根据主键查找
		单行,会带来明显的额外开销。
		
		我们可以通过使用批量操作的方式来降低这个操作带来的开销。同时还需要限制分区的个数。
		
	 5) 维护分区的成本可能很高	  
	  
	  
	  
	  
	  
	  
	  
	  

   请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1

 

 

 

 

 

分享到:
评论

相关推荐

    mysql高级参考课件(供实操参考).zip

    以下是基于提供的"mysql高级参考课件(供实操参考).zip"压缩包文件中的可能涵盖的一些关键知识点: 1. **SQL语言的高级应用**: - 子查询:学习如何在SELECT语句中嵌套查询,用于获取满足特定条件的数据。 - ...

    MYSQL 高级的资料

    MySQL的高级特性使得它在处理大数据、高并发场景以及复杂查询方面表现出色。本资料主要涵盖MySQL的高级特性,包括性能优化、存储引擎、事务处理、索引策略、备份与恢复、复制与集群等方面。 1. **性能优化**: - *...

    3_MySQL高级.zip

    MySQL是一种广泛使用的开源关系型数据库...总的来说,这个"Mysql高级"思维导图资源对想要深入理解MySQL的开发者或DBA来说是一份宝贵的资料,它涵盖了MySQL高级特性的方方面面,有助于提升数据库管理和开发的专业技能。

    mysql高级语法教学

    本教程将深入探讨MySQL的高级特性,帮助你提升在数据处理和查询优化方面的专业能力。 1. **子查询与联接操作** 子查询在SQL中用于在一个查询语句内部嵌套另一个查询,可以用来比较、筛选或聚合数据。例如,你可以...

    mysql高级 周阳脑图mmap格式

    "mysql高级 周阳脑图mmap格式" 提到的是一个关于MySQL高级特性和概念的思维导图,由周阳创建,并以mmap(内存映射文件)格式提供。mmap是一种操作系统提供的功能,允许文件或设备的内存区域被映射到进程的地址空间,...

    Mysql高级思维导图(全)

    "Mysql高级思维导图(全)"提供了一个全面的框架,帮助学习者系统地理解和掌握MySQL的高级特性。下面,我们将深入探讨这些高级主题。 1. **事务处理**:MySQL支持ACID(原子性、一致性、隔离性和持久性)属性的事务,...

    尚硅谷 周阳老师 MySQL高级 脑图 mmap和xmind格式

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,其高级特性对于数据库管理员和开发人员来说至关重要。周阳老师的"MySQL高级"课程旨在深入探讨这个强大的数据库系统,帮助学习者掌握更复杂的数据管理技巧。本教程...

    尚硅谷MySQL高级(周阳)_pdf_xmind_mmap

    《尚硅谷MySQL高级》是由周阳主讲的一门专业课程,旨在深入讲解MySQL数据库的高级特性和使用技巧。这门课程涵盖了PDF文档、Xmind思维导图和mmap映射文件等多种学习资源,确保学习者能够全面、系统地掌握MySQL的精髓...

    云南农业20级MySql高级机试综合试卷A卷.zip

    在“云南农业20级MySql高级机试综合试卷A卷”中,我们可以预见到涵盖了一系列关于MySQL高级特性和操作的题目。下面将详细讲解一些可能涉及的关键知识点: 1. **存储引擎**:MySQL支持多种存储引擎,如InnoDB(事务...

    MySQL高级.zip

    本教程"MySQL高级.zip"聚焦于MySQL的高级特性,旨在帮助用户深入理解并掌握数据库管理的高级技巧。"mmap"技术在此处指的是内存映射文件,它是Linux操作系统中的一种高效访问大文件的机制,将文件内容直接映射到进程...

    mysql 高级 .txt

    ### MySQL高级特性概述 MySQL作为一款广泛使用的开源关系型数据库管理系统,在企业和互联网应用中扮演着重要角色。随着技术的发展和业务需求的提升,仅仅掌握基本的SQL查询操作已经远远不够。高级特性能够帮助...

    MySQL入门到高级-康师傅版.zip

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,尤其在Web开发领域中广泛应用。本教程"MySQL入门到高级-康师傅版.zip"旨在帮助初学者快速掌握MySQL的基础,并逐步提升至高级水平。尚硅谷教育机构的宋红康老师...

    周阳Mysql高级脑图完整版,希望对你有用

    周阳的Mysql高级脑图完整版提供了一个全面的学习框架,帮助用户深入理解MySQL的高级特性。以下将根据标题、描述以及标签,详细解析这个脑图可能包含的重要知识点。 首先,脑图可能从以下几个核心领域展开: 1. **...

    MySQL王者晋级之路_MySql王者晋级之路_

    最后,了解MySQL的新特性和发展趋势,如MySQL 8.0引入的增强功能,如JSON字段支持、新的分区策略以及改进的性能指标监控工具,可以帮助你保持与时俱进。 "MySQL王者晋级之路"这份资料,将带领你系统地学习和掌握...

    尚硅谷mysql高级+尚硅谷springcloud思维导图.mmap

    尚硅谷周阳老师的MySQL高级课程深入讲解了MySQL的高级特性与最佳实践,旨在帮助学员掌握更深层次的数据库管理技能。以下是该课程可能涵盖的关键知识点: 1. SQL优化:包括查询优化、索引优化、存储引擎的选择以及...

    MySQL初级与高级教程

    #### 二、MySQL高级特性 1. **视图** - 视图的概念:虚拟表,基于一个或多个表的查询结果。 - 创建视图:`CREATE VIEW view_name AS SELECT ...`。 - 修改视图:`ALTER VIEW view_name AS SELECT ...`。 - 删除...

    mysql高级笔记.zip

    以上只涵盖了MySQL高级特性的冰山一角,实际的“mysql_advanced-master”可能还会涉及更多的内容,如触发器的编写、存储过程的优化、性能监控工具的使用、分区策略的设计以及复制配置等。通过深入学习这些知识,...

    mysql高级教程思维导图12

    本教程"mysql高级教程思维导图12"聚焦于MySQL的高级特性,旨在帮助开发者深化对数据库管理的理解,提升数据库设计和优化能力。 1. **SQL查询优化**: - `EXPLAIN`关键字:通过EXPLAIN分析SQL执行计划,理解查询...

    MYSQL高级.zip

    MySQL是一种广泛使用的...通过这四天的学习,读者将对MySQL的高级特性和优化技巧有深入的理解,能够更好地管理和维护MySQL数据库,提升系统的稳定性和性能。对于数据库管理员和开发人员来说,这些都是不可或缺的知识。

Global site tag (gtag.js) - Google Analytics