MySQL 建表的优化策略

MacOS上如何修改jupyter book的默认打开地址以及如何复制文件路径 记点笔记,才换新系统小半年,还是不太熟悉,所以记录一下笔记,感觉之后也会用到,希望能帮到你们。主要内容是:修改jupyter的默认地址以及复制文件路径。 阅读详情

原文地址:今天写的一个数据库建表经验总结,用做优化表结构的参考

MySQL 建表的优化策略

目录
1. 字符集的选择 1
2. 主键 1
3. 外键 2
4. 索引 2
4.1. 以下情况适合于创建索引 2
4.2. 以下的情况下不适合创建索引 3
4.3. 联合索引 3
4.4. 索引长度 4
5. 特殊字段 4
5.1. 冗余字段 4
5.2. 分割字段 4
5.3. BLOB和CLOB 5
6. 特殊 5
6.1. 表格分割 5
6.2. 使用非事务表类型 5

1. 字符集的选择
如果确认全部是中文,不会使用多语言以及中文无法表示的字符,那么GBK是首选。
采用UTF-8编码会占用3个字节,而GBK只需要2个字节。
2. 主键
尽可能使用长度短的主键
系统的自增类型AUTO_INCREMEN, 而不是使用类似uuid()等类型。如果可以使用外键做主键,则更好。比如1:1的关系,使用主表的id作为从表的主键。
主键的字段长度需要根据需要指定。
tinyint 从 2的7次方-1 :-128 到 127
smallint 从 2的15次方-1 :-32768 到 32767
mediumint 表示为 2的23次方-1: 从 -8388608 到8388607
int 表示为 2的31次方-1
bigint 表示为 2的63次方-1

在主键上无需建单独的索引,因为系统内部为主键建立了聚簇索引。
允许在其它索引上包含主键列。
3. 外键
? 外键会影响插入和更新性能,对于批量可靠数据的插入,建议先屏蔽外键检查。
? 对于数据量大的表,建议去掉外键,改由应用程序进行数据完整性检查。
? 尽可能用选用对应主表的主键作作为外键,避免选择长度很大的主表唯一键作为外键。
? 外键是默认加上索引的
4. 索引
创建索引,要在适当的表,适当的列创建适当数量的适当索引。在查询优先和更新优先之间做平衡。
4.1. 以下情况适合于创建索引
? 在经常需要搜索的列上,可以加快搜索的速度
? 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构
? 在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度
? 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的
? 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间
? 在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。

4.2. 以下的情况下不适合创建索引
? 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
? 对于那些只有很少数据值的列也不应该增加索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加快检索速度。
? 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少。
当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。
? 如果表数据很少,比如每个省按市做汇总的表,一般低于2000,且数据量基本没有变化。此时增加索引无助于查询性能,却会极大的影响更新性能。

? 当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当对修改性能的要求远远大于检索性能时,不应该创建索引。
4.3. 联合索引
? 在特定查询里,联合索引的效果高于多个单一索引,因为当有多个索引可以使用时,MySQL只能使用其中一个。
在查询里,同时用到了联合索引包含的前几个列名,都会使用到联合索引,否则将部分或不会用到。比如我们有一个firstname、 lastname、age列上的多列索引,我们称这个索引为fname_lname_age。当搜索条件是以下各种列的组合时,MySQL将使用 fname_lname_age索引:
firstname,lastname,age
firstname,lastname
firstname
从另一方面理解,它相当于我们创建了(firstname,lastname,age)、(firstname,lastname)以及(firstname)这些列组合上的索引。
4.4. 索引长度
? 对于CHAR或者Varchar的列,索引可以根据数据的分布情况,用列的一部分参与创建索引。
create index idx_t_main on t_main(name(3));
这里就是指定name的前三个字符参与索引,而不是全部
? 最大允许的长度为1000个字节,对已GBK编码则是500个汉字
5. 特殊字段
5.1. 冗余字段
就是用空间换取时间。如果大表查询里经常要join某个基础表,且这个数据基本不变,比如人的姓名,城市的名字等。一旦基础表发生变动,则需要更新所有涉及到的冗余表。
5.2. 分割字段
如果经常出现以某个字段的某个局部进行检索和汇总(substring()),可以考虑将这一部分独立出来。
比如统计姓名里,每种姓氏的人数,可以考虑实现就按照姓和名分别保存,而不是一个字段。
还有就是某些上下级结构的实现,也可以考虑将不同的级别放在不同的字段里。
5.3. BLOB和CLOB
此类字段一般数据量很大,建议设计上数据库可以只保存其外部连接,而数据以其它方式保存,比如系统文件。
6. 特殊
6.1. 表格分割
如果一个表有许多的列,但平时参与查询和汇总的列却并不是很多,此时可以考虑将表格拆分成2个表,一个是常用的字段,另一个是很少用到的字段。
6.2. 使用非事务表类型
? MySQL支持多种表类型,其中InnoDB类型是支持事物的,而MyISAM类型是不支持的,但MyISAM速度更快。对于某些数据,比如地理行政划分,民族等不可能参与事务的数据,可以考虑用MyISAM类型的表格。
? 但InnoDB的表,将无法用MyISAM表数据做外键约束了。
? MyISAM表参与的事务,其InnoDB表可以正常的提交和回滚,但不影响MyISAM表。

antiSMASH安装与使用 antiSMASH本地安装 简要: antiSMASH的本地安装需要安装很多的依赖包,本文章使用conda辅助安装 参考: 官方:https://docs.antismash.secondarymetabolites.org/install/ 文章:http://blog.sciencenet.cn/blog-3416913-1240614.html 依赖包下载 conda install -y diamond=0.8.36 conda install -y fasttree=2.1.9 conda ins 阅读详情

相关推荐

IAR9.30以上版本安装、注册、新工程和配置过程详细介绍

IAR 一般是指一款嵌入式软件的集成开发环境,类似于 MDK-Keil 这款软件。IAR 对于不同的内核处理器,是对应不同的 IAR 软件的,IAR 到目前为止支持大部分的MCU,比如8051系列、ARM架构系列、MSP430系列、AVR系列等等这些常用的芯片架构。对于 ARM 架构的芯片,有对应的 IAR Embedded Workbench for ARM 软件平台,因为我主要是使用 ARM 架构芯片,下面安装、注册和使用都是基于这个版本进行介绍的。

luobeihai的博客 5万+

mysql优化策略

mysql优化策略 MySQL 数据库常见的优化手段分为三个层面:SQL 和索引优化数据库结构优化、系统硬件优化等,然而每个大的方向中又包含多个小的优化点。 1.索引优化 假如我们没有添加索引,那么在查询就会触发全扫描,因此查询的数据就会很多,并且查询效率会很低,为了提高查询的性能,我们就需要给最常使用的查询字段上,添加相应的索引,这样才能提高查询的性能。 ①使用正确的索引 避免在 where 查询条件中使用 != 或者 <> 操作符,因为这些操作符会导致查询引擎放弃索引而进行全扫描。

Artisan_w 1422

OpenClaw 报错 TypeError: Cannot read properties of undefined (reading ‘prototype‘):Node.js 版本不兼容

国产化环境中部署OpenClaw云边协同平台,出现"TypeError: Cannot read properties of undefined (reading 'prototype')"报错。经分析发现根本原因是Node.js版本与依赖生态不兼容,新版本Node(如v21)移除了旧依赖使用的内部API。解决方案包括:1)使用nvm切换至兼容的Node 16/18 LTS版本;2)容器化部署固定Node版本;3)遵循官方推荐的引擎版本范围。该问题揭示现代工程中版本管理的重要性,

博客 2266

Mysql优化策略

Mysql数据库优化策略简析 当数据库出现性能瓶颈,我们需要进行优化,目前有两类的优化策略 硬件层优化:增加机器资源,提升性能 软件层优化:SQL调优,结构优化,读写分离,分库分数据库集群 数据库性能瓶颈的对外现: 大量请求被阻塞:高并发场景下,连接数不够,大量请求处于阻塞状态 SQL操作变慢:比如查询上亿数据的,没有命中索引进行了全扫描 存储问题:磁盘不够了 主要简单...

Y先森0.0 1008

史上最全MySQL优化方案(长文)

这里特别强调一下分片规则的选择问题,如果某个的数据有明显的间特征,比如订单、交易记录等,则他们通常比较合适用间范围分片,因为具有效性的数据,我们往往关注其近期的数据,查询条件中往往带有间字段进行过滤,比较好的方案是,当前活跃的数据,采用跨度比较短的间段进行分片,而历史性的数据,则采用比较长的跨度存储。如果数据有明显的热点,而且除了这部分数据,其他数据很少被访问到,那么可以将热点数据单独放在一个分区,让这个分区的数据能够有机会都缓存在内存中,查询只访问一个很小的分区,能够有效使用索引和缓存。

jjc4261的博客 1988

MySQL调优】如何进行MySQL调优?一篇文章就够了!

MySQL调优主要分为三个步骤:监控报警、排查慢SQL、MySQL调优。 排查慢SQL:开启慢查询日志 、找出最慢的几条SQL、分析查询计划 。 MySQL调优: 基础优化:缓存优化、硬件优化、参数优化、定期清理垃圾、使用合适的存储引擎、读写分离、分库分设计优化:数据类型优化、冷热数据分等。 索引优化:考虑索引失效的11个场景、遵循索引设计原则、连接查询优化、排序优化、深分页查询优化、覆盖索引、索引下推、用普通索引等。 SQL优化

种一棵树最好的时间是十年前,其次是现在 3万+

mysql性能优化-数据设计优化

MySQL 的性能优化不仅仅依赖于硬件和 SQL 优化,数据设计是影响数据库性能的根本因素。通过选择合适的数据类型、合理使用索引、优化范式设计、分区和分片策略以及外键与约束的优化,可以显著提升 MySQL 数据库的存储效率和查询性能。

Flying_Fish_roe的博客 1374

php mysql实例,MySQL优化策略小结

MySQL优化策略小结作者:小涵 | 来源:互联网 | 2018-07-14 11:50阅读: 4785mysql数据库经验总结,用做优化结构的参考mysql 数据库经验总结,用做优化结构的参考目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 4...

weixin_30739835的博客 153

mysql字段属性为clob_MySQL优化策略

MySQL 优化策略目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45.3. BLOB和CLOB 56. 特殊 56.1. 格分割 56.2. 使用非事务类型 51. 字符集的选择如果确认...

weixin_36328628的博客 1348

mysql 性能_MySQL 优化策略 小结

MySQL 优化策略 小结更新间:2009年09月09日 09:03:29 作者:mysql 数据库经验总结,用做优化结构的参考目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45....

weixin_32619013的博客 181

mysql数据库如何创冗余小的_MySQL 优化策略 小结

mysql 数据库经验总结,用做优化结构的参考目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45.3. BLOB和CLOB 56. 特殊 56.1. 格分割 56.2. 使用非事务类型 5...

weixin_33767088的博客 314

MySQL 优化策略(转)

(源自老紫竹)MySQL 优化策略 目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45.3. BLOB和CLOB 56. 特

dengxingbo的专栏 575

MySQL优化策略

MySQL 优化策略目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45.3. BLOB和CLOB 56. 特殊 56.1. 格分割 56.2. 使用非事务类型 51. 字符集的选择如果确认...

jyqc688的专栏 162

mysql优化_MySQL 优化策略 小结

目录1. 字符集的选择 12. 主键 13. 外键 24. 索引 24.1. 以下情况适合于创索引 24.2. 以下的情况下不适合创索引 34.3. 联合索引 34.4. 索引长度 45. 特殊字段 45.1. 冗余字段 45.2. 分割字段 45.3. BLOB和CLOB 56. 特殊 56.1. 格分割 56.2. 使用非事务类型 51. 字符集的选择如果确认全部是中文,不会使用多语言...

weixin_42396588的博客 345

MySQL数据库策略与数据优化策略

MySQL数据库策略与数据优化策略 一、选择优化的数据类型原则 MySQL支持的数据类型很多,以下几个原则有助于类型选择: 1、最小数据类型原则 应该尽可能使用可以正确存储数据的最小类型数据。更小的数据通常更快,因为占用更小磁盘、内存、CPU缓存,CPU周期更少。 但是要确保没有低估需要存储的值的范围,因为在schema中很多地方增加数据类型的范围是很耗的操作。 2、简单操作原则 简单数据类型操作会使用更少的CPU周期,例如整形比字符操作的代价低,例如间的存储上,是使用MySQL内置类型还是字符

路遥知码力的博客 570

【转】MySQL 优化策略 小结

mysql 数据库经验总结,用做优化结构的参考 目录 1. 字符集的选择 1 2. 主键 1 3. 外键 2 4. 索引 2 4.1. 以下情况适合于创索引 2 4.2. 以下的情况下不适合创索引 3 4.3. 联合索引 3 4.4. 索引长度 4 5. 特殊字段 4 5.1. 冗余字段 4 5.2. 分割字段 4 5.3. BLOB和CLOB 5 6. 特殊 5 6.1. 格分割 5 6.2. 使用非事务类型 5 1. 字符集的选择 如果确认全部是中文,不会使用多语言以及中文无法示的字符,

Tirecoed的专栏 735

SQL优化总结 - MySQL

SQL优化最干货总结 - MySQL SQL优化最干货总结 - MySQL 目录 前言 SELECT语句 - 语法顺序: SELECT语句 - 执行顺序: SQL优化策略 一、避免不走索引的场景 二、SELECT语句其他优化 三、增删改 DML 语句优化 四、查询条件优化 五、优化 好了我们言归正传,首先,对于MySQL优化我一般遵从五个原则: 减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO 返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io 减少交互

会写Bug的攻城狮 327

mysql字段不能重复_mysql优化注意事项 | 木凡博客

一、原则1.定长与变长分离所谓定长,就是字段的长度是固定大小。如int占四个字节,char(4)占四个字符,一些核心并且常用的字段,应该设置为定长。而变长如varchar,text等类型的字段长度不一,适合单放一张,用主键与核心关联起来。2. 常用字段要与非常用字段分离需要结合网站的具体业务分析,分析字段的查询场景,查询频率低的字段单拆出来3. 适当增加冗余字段在一对多,需要关联统计的字...

weixin_32228501的博客 1280

MySQL语句优化

MySQL查询语句优化

loveZyourself 1736

mysql substr优化_搞懂这些MySQL优化技巧,加薪不是问题!

SQL 优化已经成为衡量程序猿优秀与否的硬性指标,甚至在各大厂招聘岗位职能上都有明码标注,如果是你,在这个问题上能吊打面试官还是会被吊打呢?有朋友疑问到,SQL 优化真的有这么重要么?如下图所示,SQL 优化在提升系统性能中是:成本最低和优化效果最明显的途径。如果你的团队在 SQL 优化这方面搞得很优秀,对你们整个大型系统可用性方面无疑是一个质的跨越,真的能让你们老板省下不止几沓子钱。优化成本:硬...

weixin_39653733的博客 270

dvdfab12_x64_12043.exe

dvdfab12_x64_12043.exe

华为OD机试真题.pdf

华为机试真题(非牛客网试练题)OD考试真题,不定期更新,文档含代码解答

上一篇: 9月5日朵朵去了医院,病毒性感冒,今天就不去幼儿园了
下一篇: 客户就是客户,技术人员在客户那里话不要太多,言多语失
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值