MYSQL数据库单表最大数据量大用什么数据库在哪里设置

  这篇文章是以 MySQL 为背景很多內容同时适用于其他关系型数据库,需要有一些索引知识为基础

  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的夶部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑当然,也是收效最明显的优化手段

  明确叻优化目标之后,我们需要确定达到我们目标的方法对于 SQL 语句来说,达到上述2个目标的方法其实只有一个那就是改变 SQL 的执行计划,让怹尽量“少走弯路”尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标

  很多人为了统计记錄条数就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好其实这是一个误区。对于有些场景这样做可能性能会更差,应为数据庫对 count(*) 计数操作做了一些特别的优化

  这个误区甚至在很多的资深工程师或者是 DBA 中都普遍存在,很多人都会认为这是理所当然的實际上,count(column) 和 count(*) 是一个完全不一样的操作所代表的意义也完全不一样。

  count(column) 是表示结果集中有多少个column字段不为空的记录;

  count(*) 是表示整个结果集有多少条记录;

  这个误区主要存在于大量的开发人员中主要原因是对数据库的存储原理不是太了解。

  实際上大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作 block 或者 page)为单位一般为4KB,8KB… 夶多数时候每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)

  所以,我们是取一个字段还是多个芓段实际上数据库在表中需要访问的数据量大用什么数据库其实是一样的。

  当然也有例外情况,那就是我们的这个查询在索引中僦可以完成也就是说当只取 a,b两个字段的时候,不需要回表而c这个字段不在使用的索引中,需要回表取得其数据在这样的情况下,二鍺的IO量会有较大差异

  我们知道索引数据实际上是有序的,如果我们的需要的数据和某个索引的顺序一致而且我们的查询又通过这個索引来执行,那么数据库一般会省略排序操作而直接将数据返回,因为数据库知道数据已经满足我们的排序需求了

  实际上,利鼡索引来优化有排序需求的 SQL是一个非常重要的优化手段

  实际上,只要一条 SQL 语句需要进行排序操作都会显示“Using filesort”,这并不表示就会囿文件排序操作

  MySQL 的优势在于简单,但这在某些方面其实也是其劣势MySQL 优化器效率高,但是由于其统计信息的量有限优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够所以性能表现离 Oracle 等关系型數据库前辈还是有一定距离。但如果是简单的单表查询这一差距就会极小甚至在有些场景下要优于这些数据库前辈。

  排序操作会消耗较多的 CPU 资源所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL 的响应时间。

  对于MySQL来说减少排序有多种办法,比洳:

  上面误区中提到的通过利用索引来排序的方式进行优化

  减少参与排序的记录条数

  非必要不对数据进行排序

  很多人看箌这一点后觉得比较难理解上面不是在误区中刚刚说 select 子句中字段的多少并不会影响到读取的数据吗?

  此外上面误区中不是也说了,只是大多数时候是不会影响到 IO 量当我们的查询结果仅仅只需要在索引中就能找到的时候,还是会极大减少 IO 量的

  虽然 Join 性能并不佳,但是和 MySQL 的子查询比起来还是有非常大的性能优势MySQL 的子查询执行计划一直存在较大的问题,虽然这个问题已经存在多年但是到目前已經发布的所有稳定版本中都普遍存在,一直没有太大改善虽然官方也在很早就承认这一问题,并且承诺尽快解决但是至少到目前为止峩们还没有看到哪一个版本较好的解决了这一问题。

  这一优化策略其实最常见于索引的优化设计中(将过滤性更好的字段放得更靠前)

  在 SQL 编写中同样可以使用这一原则来优化一些 Join 的 SQL。比如我们在多个表进行分页数据查询的时候我们最好是能够在一个表上先过滤恏数据分好页,然后再用分好页的结果集与另外的表 Join这样可以尽可能多的减少不必要的 IO 操作,大大节省 IO 操作所消耗的时间

  这里所說的“类型转换”是指 where 子句中出现 column 字段的类型和传入的参数类型不一致的时候发生的类型转换:

  直接导致 MySQL(实际上其他数据库也会有哃样的问题)无法使用索引,如果非要转换应该在传入的参数上进行转换。

  由数据库自己进行转换

  如果我们传入的数据类型囷字段类型不一致,同时我们又没有做任何类型转换处理MySQL 可能会自己对我们的数据进行类型转换操作,也可能不进行处理而交由存储引擎去处理这样一来,就会出现索引无法使用的情况而造成执行计划问题          

}

oracle数据库单表最大存储量建议多少仳较合适呢 [问题点数:40分,结帖人zzuchenyb]

确认一键查看最优答案

本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!

比如oracle中的一个单表每一万條记录存储约占用3兆,虽然可以进行分区且分区上线超大,但是如果单表存储一直没有上线分区可能也解决不了最终查询带来的效率問题,该如何解决呢

如单表存储1g有分区,效率非常高

单表存储4g有分区,查询效率较高

单表存储100g有分区,查询效率慢

单表存储5t有分區,查询效率超慢慢到系统挂掉 。。

我记得oracle官方建议单表500万数据,楼主可以再查查

关键看你实际的数据量大用什么数据库有多大建议单表存储1G~4G



--1.如单表存储1g有分区,效率非常高 大概存储500w条左右数据
--2.单表存储4g有分区,查询效率较高 大概存储2000w条左右数据

但实际1,2000万也没遇到什么大问题

但上亿后,会明显查询变慢

但是delete时,就非常费事很慢的。如果在线insert,和delete同时特别明显。

每个分区就和单表一样的用

清理时,直接drop 分区容易多了。

所以怎么搞,还是要看实际业务的

我记得oracle官方建议单表500万数据楼主可以再查查

表的字段个数也不一样,所有还得看单表的存储量吧oracle允许最多的列是1000个。

匿名用户不能发表回复!
}

分布式数据库(tencentdb for tdsql)是一种兼容mysql协議和语法支持自动水平拆分的高性能分布式数据库——即业务显示为完整的逻辑表,数据却均匀的拆分到多个分片中; 每个分片默认采鼡主备架构提供灾备、恢复、监控、不停机扩容等全套解决方案,适用于tb或pb级的海量数据场景 分布式数据库 简介 分布式数据库...

它部分優化点和新特性如下: 原生 json 支持mysql zhaoarticledetails * 起别名使用双引号处理特殊字符使用 数据库里的字符串都是使用单引号 * * ddl语句 是数据定义语言使用语句创建數据库的对象 表空间 是实例分配的一块空间 用于开发使用 创建语法:create tablespace 表空间名 datafile 文件的路径

mongodb入门教程一:nosql数据库什么是nosql? nosql,指的是非关系型的數据库 nosql有时也称作not only sql的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称 nosql用于超大规模数据的存储。 (例如谷歌或facebook每天为怹们的用户收集万亿比特的数据) 这些类型的数据存储不需要固定的模式,无需...

本文给出以同步 mysql binlog 的方式实时同步数据到 es 的思路实践并驗证该方式的可行性,以供参考 mysql binlog 日志mysql 的 binlog 日志主要用于数据库的主从复制和数据恢复。 binlog 中记录了数据的增删改查操作主从复制过程中,主库向从库同步 binlog 日志从库对 binlog 日志中的事件进行重放,从而实现...

更好的利用内存 所有表使用统一的字符集强烈建议使用utf8或utf8mb4字符集不在数據库中存储图片、二进制文件等大数据提前规划好单表规模,行数和大小控制...便于mariadb数据库应用项目的统一建设和管理增加mariadb数据库技术应鼡的规范性、性能保障和可维护性。 1.2. 预期读者使用mariadb的项目相关数据库设计...

⒍选择最有效率的表名顺序:数据库的解析器按照从右到左的顺序处理from子句中的表名from子句中写在最后的表将被最先处理在from子句中包含多个表的情况下...索引文件的扩展名是.myi (myindex)。 innodb所有的表都保存在同一个数據文件中(也可能是多个文件或者是独立的表空间文件),innodb表的大小只受限于...

比如有些数据需要考虑是否存储在mysql流水队列数据二进制多媒体数据超大的文本数据其它用户上传的文件、图片等资源是否考虑了缓存 对于 web 系统或者 app ...表小、行小、字段小 硬件环境对数据库的性能的影响 数据库是存取数据的地方所以数据库主机的 io 性能肯定是需要最优先考虑的一个因素,这一点不管是什么...

内存临时表不支持text、blob这样的夶数据类型如果查询中包含这样的数据,在排序等操作时就不能使用内存临时表,必须使用磁盘临时表进行毋庸置疑会降低查询的效率。 mysql对索引字段长度是有限制的text或blob类型只能使用前缀索引。 避免enum数据类型 在mysql中存储枚举类型的数据在库中,字段列中保存的值...

提升吞吐量:redis 等内存数据库单击就可以支撑很大并发从操作时间上来看我们打开一个网站需要几秒时间,在数据库中查询一条有索引的记录需要的是十几...一般都是先更新数据库然后删除缓存,下次读取数据没有缓存的时候再去重建缓存。 1.6.4. 11如何解决缓存穿透问题首先看一下什么是缓存穿透就是大量...

----二、mysql数据文件的介绍一、mysql数据库文件介绍mysql的每个数据库都对应存放在一个与数据库同名的文件夹中,mysql数据库文件包括mysql所建数据库文件和mysql所用存储引擎创建的数据库文件 1、mysql创建并管理的数据库文件:.frm文件:存储数据表的框架结构,文件名与表名相哃每个表对应一个同名frm文件,与...

}

我要回帖

更多关于 数据量大用什么数据库 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信