首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库:结构优化

我们无法改变数据库中需要存储的数据,但是我们可以在数据的存储方式方面做一些优化。 一、数据类型的选择: 下面关于字段类型的优化建议主要适用于记录条数较多,数据量较大的场景。...4、ENUM & SET: 对于状态字段,可以尝试使用 ENUM 来存放,因为可以极大的降低存储空间,而且即使需要增加新的类型,只要增加于末尾,修改结构也不需要重建数据。...二、结构设计: 上面几点的优化都是为了减少每条记录的存储空间大小,让每个数据库中能够存储更多的记录条数,以达到减少 IO 操作次数,提高缓存命中率。...下面这个优化建议可能很多开发人员都会觉得不太理解,因为这是典型的反范式设计,而且也和上面的几点优化建议的目标相违背。...当我们的中存在类似于 TEXT 或者是很大的 varchar 类型的大字段的时候,如果我们大部分访问这张的时候都不需要这个字段,我们可以将其拆分到另外的独立中,以减少常用数据所占用的存储空间。

7K10

Mysql优化-分区

SQL优化、索引、缓存、参数配置 架构调整:分区、分、分库(读写分离或者业务拆分) 读写分离主从复制的优势 主从复制,解决的是容灾类的问题,容灾需要保证数据库切换的实时性和数据的一致性,主机挂了的时候...错误的分操作,会带来bug 分的性能更好,不需要查询优化器来选择读取哪张,但是分编码更复杂,要通过代码指定数据存储到特定的 分区只用操作数据库进行分区操作,代码不需要任何更改 数据库分库(物理层面进行拆分...水平分区:对表的行进行分区,不同分组中物理分隔的数据组合在一起,中的所有列都可以在每个分区找到,维持了的属性结构。...SQL经过优化请求时间依旧较长 数据量大 中的数据是分段的 对数据的操作往往只涉及一部分数据,而不是所有的数据 分区解决的问题 和单个磁盘或文件系统分区相比,可以存储更多的数据。 优化查询。...使用range分区时结构要么没有主键,要么分区字段必须是主键。 可以使用PRIMARY KEY (id,xxx)来将多个字段作为主键。

4.3K11
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL多层级树形结构的搜索查询优化

    MySQL多层级树形结构的搜索查询优化 业务中有思维导图的功能,涉及到大量的树形结构搜索、查询相关的功能,使用场景上查询量远高于增删改操作,记录一下当前的解决方案。...一、结构 简化的结构类似 create table nodes ( id int primary key auto_increment, name varchar(255) not null...comment '上级节点', index nodes_parent_id_index (parent_id), index nodes_name_index (name) ); 二、当前解决方案 更新结构...查询ID为“5”的节点的所有子级、孙子级中name包含“搜索词”的记录 更新后的查询方式: -- 查询父级节点记录,获取到父级的path select * from nodes where id =...MySQL多层级树形结构的搜索查询优化 使用WordPress作为小程序后端——APPID有效性前置检查 使用WordPress作为小程序后端——小程序请求前置检查 Windows rclone挂载sftp

    1.4K50

    Mysql优化方案

    MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单优化 除非单数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的在千万级以下...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED...另外,还可以对一个独立分区进行优化、检查、修复等操作 部分查询能够从查询条件确定只落在少数分区上,速度会很快 分区的数据还可以分布在不同的物理设备上,从而搞笑利用多个硬件设备 可以使用分区赖避免某些特殊瓶颈...有一种早期的简单的分区实现 - 合并(merge table),限制较多且缺乏优化,不建议使用,应该用新的分区机制来替代 垂直拆分 垂直分库是根据数据库里面的数据的相关性进行拆分,比如:一个数据库里面既存在用户数据...NoSQL,彻底解决水平扩展问题,例如: 日志类、监控类、统计类数据 非结构化或弱结构化数据 对事务要求不强,且无太多关联操作的数据 ?

    2.8K71

    MySQL优化方案

    MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单优化 除非单数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的在千万级以下...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED...,从而进行SQL优化,如下图5条记录落在两个分区上: mysql> explain partitions select count(1) from user_partition where id in...有一种早期的简单的分区实现 – 合并(merge table),限制较多且缺乏优化,不建议使用,应该用新的分区机制来替代 垂直拆分 垂直分库是根据数据库里面的数据的相关性进行拆分,比如:一个数据库里面既存在用户数据...的需求并不大,并不要求ACID,可以考虑将这些迁移到NoSQL,彻底解决水平扩展问题,例如: 日志类、监控类、统计类数据 非结构化或弱结构化数据 对事务要求不强,且无太多关联操作的数据

    1.5K10

    MySQL优化方案

    MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化:   单优化   除非单数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:   字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上...另外,还可以对一个独立分区进行优化、检查、修复等操作 部分查询能够从查询条件确定只落在少数分区上,速度会很快 分区的数据还可以分布在不同的物理设备上,从而搞笑利用多个硬件设备 可以使用分区赖避免某些特殊瓶颈...MySQL有一种早期的简单的分区实现 - 合并(merge table),限制较多且缺乏优化,不建议使用,应该用新的分区机制来替代   垂直拆分   垂直分库是根据数据库里面的数据的相关性进行拆分,...的需求并不大,并不要求ACID,可以考虑将这些迁移到NoSQL,彻底解决水平扩展问题,例如: 日志类、监控类、统计类数据 非结构化或弱结构化数据 对事务要求不强,且无太多关联操作的数据

    3.1K61

    MySQL优化方案

    MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单优化 除非单数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的在千万级以下...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED...,从而进行SQL优化,如下图5条记录落在两个分区上: mysql> explain partitions select count(1) from user_partition where id in...有一种早期的简单的分区实现 – 合并(merge table),限制较多且缺乏优化,不建议使用,应该用新的分区机制来替代 垂直拆分 垂直分库是根据数据库里面的数据的相关性进行拆分,比如:一个数据库里面既存在用户数据...这种RDBMS的需求并不大,并不要求ACID,可以考虑将这些迁移到NoSQL,彻底解决水平扩展问题,例如: 日志类、监控类、统计类数据 非结构化或弱结构化数据 对事务要求不强,且无太多关联操作的数据

    1.4K40

    MySQL优化方案

    MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化。...单优化 除非单数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的在 千万级以下,字符串为主的在 五百万以下是没有太大问题的。...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量。...,从而进行SQL优化,如下图5条记录落在两个分区上: mysql> explain partitions select count(1) from user_partition where id in...非结构化或弱结构化数据 对事务要求不强,且无太多关联操作的数据 原文出处:https://segmentfault.com/a/1190000006158186 END

    1.7K40

    MySQL优化方案

    1、尽量不要在一开始就考虑拆分,会带来逻辑、部署、运维的各种复杂度; 2、一般以整型值为主的在千万级以下,字符串为主的在五百万以下问题不大; 注意: 1、Covering index:...索引覆盖:即当索引本身包含查询所需全部数据时,不再访问数据文件本身,也就是不再需要回操作; 2、复合索引顺序:理论上索引对顺序是敏感的,但是由于MySQL的查询优化器会自动调整where子句的条件顺序以使用适合的索引...优化 1、字段 尽量使用TINYINT、SMALLINT、MEDIUMINT作为整数类型,而非INT类型,如果非负加上UNSIGNED; VARCHAR的长度只分配真正需要的空间; 使用枚举或整型代替字符串类型...; 尽量使用TIMESTAMP而非DATETIME; 单不要有太多字段,建议在20以内; 避免使用NULL字段,很难查询优化且占用额外索引空间; 用整型来存IP; 2、索引 索引不是越多越好,要根据查询有针对性的创建...,考虑在WHERE和ORDER BY涉及到的列建索引,可以根据EXPLAIN来查看是否用了索引还是全扫描; 避免在WHERE子句中对字段进行NULL值判断,否则将导致全扫描; 值分布稀少的字段不适合建立索引

    1.1K20

    MySQL优化方案

    背景 阿里云RDS FOR MySQLMySQL5.7版本)数据库业务每月新增数据量超过千万,随着数据量持续增加,我们业务出现大慢查询,在业务高峰期主业务的慢查询需要几十秒严重影响业务 方案概述...一、数据库设计及索引优化 MySQL数据库本身高度灵活,造成性能不足,严重依赖开发人员的设计能力以及索引优化能力,在这里给几点优化建议 时间类型转化为时间戳格式,用int类型储存,建索引增加查询效率...三、分历史数据迁移到MySQL8.0 X-Engine存储引擎 分业务保留3个月数据(这个根据公司需求来),历史数据按月分到历史库X-Engine存储引擎, 为什么要选用X-Engine存储引擎...四、阿里云PloarDB MySQL8.0版本并行查询 分之后我们的数据量依然很大,并没有完全解决我们的慢查询问题,只是降低了我们业务的体量,这部分慢查询我们需要用到PolarDB的并行查询优化 PolarDB...六、后记 千万级大优化是根据业务场景,以成本为代价优化的,不是一上来就数据库水平切分扩展,这样会给运维和业务带来巨大挑战,很多时候效果不一定好,我们的数据库设计、索引优化、分策略是否做到位了,应该根据业务需求选择合适的技术去实现

    1.6K11

    MySQL中的设计优化

    MySQL数据库中,设计的优劣同样对性能有非常重要的影响。本节将介绍设计的优化方法,包括巧用多表关系、结构设计优化拆分等。...结构设计优化 在进行结构设计时,选择合适的数据类型,慎用NULL值,适度冗余,适当进行拆分等方法对提高性能是至关重要的。结构设计优化采取的措施通常包括以下几个方面。...NULL值不利于索引,MySQL难以优化可为NULL的列查询。当可为NULL的列被索引时,每个索引记录需要一个额外的字节用于标识其是否可空。如果某列计划要创建索引,要尽量避免将其设计成可为NULL。...上述仅是理想状态下表结构设计优化措施,在实际商业环境下,需要根据实际情况进行灵活设计,合理平衡。 表单分拆 通常情况下,随着时间的推移及业务量的增大,数据库中的数据会越来越多。...图4 垂直拆分效果 说明:本文节选自北京理工大学出版社新出版的《MySQL从入门到部署实战(视频教学版)》。

    17610

    MySQL优化方案(长文)

    |原文链接:https://segmentfault.com/a/1190000006158186 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单优化 除非单数据未来会一直不断上涨...而事实上很多时候MySQL的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 1、尽量使用TINYINT、SMALLINT、MEDIUM_INT作为整数类型而非INT,如果非负则加上...MySQL实现分区的方式也意味着索引也是按照分区的子表定义,没有全局索引 用户的SQL语句是需要针对分区优化,SQL条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,可以通过...有一种早期的简单的分区实现 – 合并(merge table),限制较多且缺乏优化,不建议使用,应该用新的分区机制来替代 垂直拆分 垂直分库是根据数据库里面的数据的相关性进行拆分,比如:一个数据库里面既存在用户数据...的需求并不大,并不要求ACID,可以考虑将这些迁移到NoSQL,彻底解决水平扩展问题,例如: 1、日志类、监控类、统计类数据 2、非结构化或弱结构化数据 3、对事务要求不强,且无太多关联操作的数据

    1.5K50

    故障分析 | MySQL 派生优化

    那么其实 SQL 优化也分为了 2 步,首先是多张子表的全扫描,是否可以用索引扫描替换,加快数据检索。 而后是主要的环节,这个派生作为被驱动时,是否可以走索引?...三、派生 既然这个 SQL 优化涉及到了派生,那么我们先看下何谓派生,派生有什么特性?...MySQL 5.7 之前的处理都是对 Derived table(派生) 进行 Materialize(物化),生成一个 临时 用于保存 Derived table(派生) 的结果,然后利用 临时...MySQL 5.7 中对 Derived table(派生) 做了一个新特性,该特性允许将符合条件的 Derived table(派生) 中的子表与父查询的合并进行直接 JOIN,类似于 Oracle...四、SQL 优化 简单介绍了下派生,下面我们开始尝试优化这个 SQL,步骤分 2 步: 1. 解决多张派生子表 union all 时全扫描的问题。 2.

    1.5K20

    MySQL千万大优化实践

    以文章评论为例,查询20191201~20191231日期间发表的经济科技类别的文章,同时需要显示这些文章的热评数目 涉及到的四张结构如下所示 文章结构和索引信息如下,文章中存储了200万数据 ?...评论结构和索引信息如下,评论存储了1000万数据 ? ? 文章分类结构如下,这张数据比较少,仅仅存储了300条数据 ? 用户结构如下,该存储了100万数据 ?...原因是tb_category的最小,只有300条数据,mysql查询优化器通常情况下都会以小作为驱动。...使用了Batched Key Access进行了优化以达到减少索引回查找的IO次数,随后关联tb_cmt,这次关联中,mysql使用了tb_cmt的article_id_idx字段。...数据量少,mysql查询优化器会使用tb_category作为驱动

    2K31

    mysql优化专题」优化之路高级进阶——的设计及优化(6)

    正文:的设计及优化 优化①:创建规范化,消除数据冗余 数据库范式是确保数据库结构合理,满足各种查询需要、避免数据库操作异常的数据库设计方式。...【mysql优化专题】相关 「mysql优化专题」这大概是一篇最好的mysql优化入门文章(1) 「mysql优化专题」90%程序员都会忽略的增删改优化(2) 「mysql优化专题」单查询优化的一些小总结...,非索引设计(3) 「mysql优化专题」你们要的多表查询优化来啦!...请查收(4) 「mysql优化专题」90%程序员面试都用得上的索引优化手册(5) 今天,的设计及优化就讲到这里,重点是的拆分(加分项)。觉得有收获的同学可以收藏关注。...本号内有多个专题,如【数据结构】、【netty专题】、【dubbo专题】、【mysql优化专题】、【redis专题】、【高并发专题】等优质好文。一起学习,共同进步。

    81220

    MYSQL 数据库结构优化

    数据库结构优化 优化数据大小 使占用尽量少的磁盘空间。减少磁盘I/O次数及读取数据量是提升性能的基础原则。越小,数据读写处理时则需要更少的内存,同时,小的索引占用也相对小,索引处理也更加快速。...的主键索引应该尽可能的短,这样行匹配能够更加容易和高效。对于InnoDB 类型,主键列博阿含在二级索引中,所以对于具有较多二级索引的数据库结构,较短的主键能够节省相当的存储空间。...索引 联合查询 规范化 优化MySQL 数据类型 Numeric 数据优化 对于唯一的IDs 或者其它既可以使用string类型也可以使用numbers类型的列,优先使用numeric 类型。...多表优化 一些针对单个查询的优化手段涉及分操作,但是当的数量逐渐增多,涉及多表查询的优化问题则是另一个需要考虑的问题。...满足一定条件的UNION 操作将不会使用临时。相反,只会保留临时创建的数据结构,用于执行结果类型转换。没有完全的实例化,没有行写入,也没行读取,查询的数据行直接返回到客户端。

    7.5K51

    Mysql实例 数据库优化--结构和性能优化

    三.数据库结构设计 当开发人员设计好表语句后,就需要运维工程师进行服务部署,项目上线。这里应该根据需求进行预估访问量,再进行配置的选择和结构设计。...四.数据库性能优化 硬件配置选择 硬盘 磁盘寻道能力(磁盘I/O),以目前高转速SCSI硬盘(7200转/秒)为例,服务器硬盘读200M/S,写120M/S。...数据库配置优化 MySQL应用最广泛的有两种存储引擎:一个是MyISAM,不支持事务处理,读性能处理快,级别锁。...建议开启独立空间模式,每个的索引和数据都存在自己独立的空间中,可以实现单在不同数据库中移动。...innodb_file_per_table = OFF #日志缓冲区大小,由于日志最长每秒钟刷新一次,所以一般不用超过16M innodb_log_buffer_size = 8M 数据库安全优化 数据库安全是项目中最重要的部分

    2.3K20
    领券