《mysql学习》-- MySQL数据库设计总结

MySQL与Navicat数据仓库搭建实战项目 数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,主要用于支持管理决策。与传统的操作型数据库不同,数据仓库强调数据的整合、历史存储和分析能力。它从多个异构数据源中抽取数据,经过清洗、转换、加载(ETL)后,形成统一的结构化数据模型,如星型模型或雪花模型,便于后续的多维分析。Navicat 提供了丰富的功能模块,帮助用户高效地进行数据库开发与管理。 阅读详情

mysql

原文:MySQL数据库设计总结

MySQL数据库设计总结

规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。

注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽然在一般情况下,查询性能比InnoDB高,但InnoDB的以主键为条件的查询性能是非常高的。

规则2:命名规则。

  1. 数据库和表名应尽可能和所服务的业务模块名一致
  2. 服务与同一个子模块的一类表应尽量以子模块名(或部分单词)为前缀或后缀
  3. 表名应尽量包含与所存放数据对应的单词
  4. 字段名称也应尽量保持和实际数据相对应
  5. 联合索引名称应尽量包含所有索引键字段名或缩写,且各字段名在索引名中的顺序应与索引键在索引中的索引顺序一致,并尽量包含一个类似idx的前缀或后缀,以表明期对象类型是索引。
  6. 约束等其他对象也应该尽可能包含所属表或其他对象的名称,以表明各自的关系

规则3:数据库字段类型定义

  1. 经常需要计算和排序等消耗CPU的字段,应该尽量选择更为迅速的字段,如用TIMESTAMP(4个字节,最小值1970-01-01 00:00:00)代替Datetime(8个字节,最小值1001-01-01 00:00:00),通过整型替代浮点型和字符型
  2. 变长字段使用varchar,不要使用char
  3. 对于二进制多媒体数据,流水队列数据(如日志),超大文本数据不要放在数据库字段中

规则4:业务逻辑执行过程必须读到的表中必须要有初始的值。避免业务读出为负或无穷大的值导致程序失败

规则5:并不需要一定遵守范式理论,适度的冗余,让Query尽量减少Join

规则6:访问频率较低的大字段拆分出数据表。有些大字段占用空间多,访问频率较其他字段明显要少很多,这种情况进行拆分,频繁的查询中就不需要读取大字段,造成IO资源的浪费。

规则7:大表可以考虑水平拆分。大表影响查询效率,根据业务特性有很多拆分方式,像根据时间递增的数据,可以根据时间来分。以id划分的数据,可根据id%数据库个数的方式来拆分。

规则8:业务需要的相关索引是根据实际的设计所构造sql语句的where条件来确定的,业务不需要的不要建索引,不允许在联合索引(或主键)中存在多于的字段。特别是该字段根本不会在条件语句中出现。

规则9:唯一确定一条记录的一个字段或多个字段要建立主键或者唯一索引,不能唯一确定一条记录,为了提高查询效率建普通索引

规则10:业务使用的表,有些记录数很少,甚至只有一条记录,为了约束的需要,也要建立索引或者设置主键。

规则11:对于取值不能重复,经常作为查询条件的字段,应该建唯一索引(主键默认唯一索引),并且将查询条件中该字段的条件置于第一个位置。没有必要再建立与该字段有关的联合索引。

规则12:对于经常查询的字段,其值不唯一,也应该考虑建立普通索引,查询语句中该字段条件置于第一个位置,对联合索引处理的方法同样。

规则13:业务通过不唯一索引访问数据时,需要考虑通过该索引值返回的记录稠密度,原则上可能的稠密度最大不能高于0.2,如果稠密度太大,则不合适建立索引了。

当通过这个索引查找得到的数据量占到表内所有数据的20%以上时,则需要考虑建立该索引的代价,同时由于索引扫描产生的都是随机I/O,生其效率比全表顺序扫描的顺序I/O低很多。数据库系统优化query的时候有可能不会用到这个索引。

规则14:需要联合索引(或联合主键)的数据库要注意索引的顺序。SQL语句中的匹配条件也要跟索引的顺序保持一致。

注意:索引的顺势不正确也可能导致严重的后果。

规则15:表中的多个字段查询作为查询条件,不含有其他索引,并且字段联合值不重复,可以在这多个字段上建唯一的联合索引,假设索引字段为 (a1,a2,…an),则查询条件(a1 op val1,a2 op val2,...am op valm)m<=n,可以用到索引,查询条件中字段的位置与索引中的字段位置是一致的。

规则16:联合索引的建立原则(以下均假设在数据库表的字段a,b,c上建立联合索引(a,b,c))

  1. 联合索引中的字段应尽量满足过滤数据从多到少的顺序,也就是说差异最大的字段应该房子第一个字段
  2. 建立索引尽量与SQL语句的条件顺序一致,使SQL语句尽量以整个索引为条件,尽量避免以索引的一部分(特别是首个条件与索引的首个字段不一致时)作为查询的条件
  3. Where a=1,where a>=12 and a<15,where a=1 and b<5 ,where a=1 and b=7 and c>=40为条件可以用到此联合索引;而这些语句where b=10,where c=221,where b>=12 and c=2则无法用到这个联合索引。
  4. 当需要查询的数据库字段全部在索引中体现时,数据库可以直接查询索引得到查询信息无须对整个表进行扫描(这就是所谓的key-only),能大大的提高查询效率。
    当a,ab,abc与其他表字段关联查询时可以用到索引
  5. 当a,ab,abc顺序而不是b,c,bc,ac为顺序执行Order by或者group不要时可以用到索引
  6. 以下情况时,进行表扫描然后排序可能比使用联合索引更加有效
    a.表已经按照索引组织好了
    b.被查询的数据站所有数据的很多比例。

规则17:重要业务访问数据表时。但不能通过索引访问数据时,应该确保顺序访问的记录数目是有限的,原则上不得多于10.

规则18:合理构造Query语句

  1. Insert语句中,根据测试,批量一次插入1000条时效率最高,多于1000条时,要拆分,多次进行同样的插入,应该合并批量进行。注意query语句的长度要小于mysqld的参数 max_allowed_packet

  2. 查询条件中各种逻辑操作符性能顺序是and,or,in,因此在查询条件中应该尽量避免使用在大集合中使用in

  3. 永远用小结果集驱动大记录集,因为在mysql中,只有Nested Join一种Join方式,就是说mysql的join是通过嵌套循环来实现的。通过小结果集驱动大记录集这个原则来减少嵌套循环的循环次数,以减少IO总量及CPU运算次数

  4. 尽量优化Nested Join内层循环。

  5. 只取需要的columns,尽量不要使用select *

  6. 仅仅使用最有效的过滤字段,where 字句中的过滤条件少为好

  7. 尽量避免复杂的Join和子查询

    Mysql在并发这块做得并不是太好,当并发量太高的时候,整体性能会急剧下降,这主要与Mysql内部资源的争用锁定控制有关,MyIsam用表锁,InnoDB好一些用行锁。

规则19:应用系统的优化

    1. 合理使用cache,对于变化较少的部分活跃数据通过应用层的cache缓存到内存中,对性能的提升是成数量级的。
    2. 对重复执行相同的query进行合并,减少IO次数。

​ 3. 事务相关性最小原则

Social-Auto-Upload实战:如何用Python+Playwright实现抖音/B站/小红书一键三连发? 本文详细介绍了如何使用Python和Playwright框架构建Social-Auto-Upload自动化上传工具,实现抖音、B站、小红书等平台的一键多发布。通过模拟真实用户操作和Cookie管理技术,该工具能有效解决内容创作者跨平台发布的重复劳动问题,提升工作效率。 阅读详情

相关推荐

最终篇——SWAT模型的建立

同理,Soil Data也是同样的方法导入,在Soil Database Options的选项中,选择UserSiol,用同样的方法导入土壤类型,进行重分类。打开窗口后,只定义HRU Thresholdes,其余两个不用设置,设定各数据单元的计算率,这里的10%的意思是计算精度,即分成级HRU计算单元太小,小于平均计算单元的10%,我们就不对这HRU单元进行计算(也就是说太破碎的计算单元不进行计算),若选择0%意味着全部进行计算,需要耗费大量的内存和时间,对计算机要求较高,不建议。

m0_72556434的博客 5620

七、MySQL 设计数据表

设计学生课程相关数据表,其中包括学生信息 student,教师信息表 teacher,学科表 course,学生选课表 student_course,这一小节的主要目的是为了学习如何新建数据表,合理选择字段类型。

zyg的博客 900

数据库系统概论课后习题答案(第五版 王珊、萨师煊)

第1章 绪论 1 .试述数据、数据库、数据库系统、数据库管理系统的概念。 答: ( l )数据( Data ) :描述事物的符号记录称为数据。数据的种类有数字、文字、图形、图像、声音、正文等。数据与其语义是不可分的。解析在现代计算机系统中数据的概念是广义的。早期的计算机系统主要用于科学计算,处理的数据是整数、实数、浮点数等传统数学中的数据。现代计算机能存储和处理的对象十分广泛,表

早知晓的博客 11万+

【MySQL】MySQL表设计的经验(建议收藏)

作为后端开发,我们经常需要设计数据库表。整理了21个设计MySQL表的经验准则,分享给大家,希望大家看完会有帮助。如果没有特殊的理由, 一般都建议将字段定义为 NOT NULL。为什么呢?首先,NOT NULL可以防止出现空指针问题。其次,NULL值存储也需要额外的空间的,它也会导致比较运算更为复杂,使优化器难以优化SQL。NULL值有可能会导致索引失效如果将字段默认设置成一个空字符串或常量值并没有什么不同,且都不会影响到应用逻辑, 那就可以将这个字段设置为NOT NULL。

Reische的博客 1万+

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 452

5QI(5G QoS Identifier)

此外,5QI与网络切片(Network Slicing)密切相关,网络切片允许网络运营商在物理网络内部创建虚拟网络,为不同的客户和用例提供定制化服务和QoS。5QI(5G QoS Identifier)在5G网络中用于标识不同的服务质量要求,它允许网络对不同的数据流进行优先级划分和资源分配。:5QI的实施需要对5G网络的QoS参数有深入的理解,包括延迟、吞吐量、数据包丢失率等,这对技术人员提出了较高的要求。不是所有的5G设备都支持5QI的全部功能,这可能会限制5QI应用的广泛性。

记录有价值的内容 6528

MySQL数据库:为什么它是您的最佳选择?

2. MySQL Enterprise Edition(企业版):这是 MySQL 的商业版本,适用于大型企业,提供了更高级的功能和支持。1.MySQL Community Edition(社区版):这是 MySQL 的开源社区版本,是最常用的版本,适用于个人用户和小型团队。4. MySQL NDB Cluster:这是 MySQL 集群版本中的一种,是一个高度可扩展的、实时的内存数据库,适用于需要快速读写速度的应用程序。4.开源:MySQL的社区版是开源的,使得开发者可以很容易地进行二次开发。

weixin_55376728的博客 683

基于Simulink的超级电容快速响应特性建模与仿真

本文介绍了基于Simulink的超级电容快速响应特性建模与仿真方法。主要内容包括:超级电容的工作原理、一阶RC等效电路模型及其动态电压方程;通过Simulink搭建超级电容模型的两种方法(Simscape Electrical推荐方案和基础模块透明教学方案);仿真100A×100ms放电脉冲下的电压响应特性,并与锂电池进行动态对比;分析超级电容在混合储能系统中的功率分配优势。文章还提供了工程实践要点和扩展方向,如电压均衡、温度影响评估以及与DC-DC变换器集成等。通过建模实践,验证了超级电容在毫秒级响应、高

xiaoheshang_123的博客 98

mysql数据库设计

char、varchar和text的设计 最近有表结构设计中出现了varchar(10000)的设计引起了大家的讨论,我们下面就来分析分析。 char、varchar和text基础知识 char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。 同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且

梦想是很难很难的,所以先勇敢一点 2506

Python时间序列:PaddleTS-时间序列分类

评估的指标采用F1,Precision,Recall,PaddleTS已经基于TSDataset实现了这三个指标的计算,直接调用即可。使用内置的API:get_dataset加载BasicMotions数据集。模型训练完成之后,可以对测试集进行预测并评估。模型保存之后,可以加载模型用于新的数据预测。可以将训练完成的模型保存到指定路径。概率预测 可以返回每个分类的概率。安装paddlets。

斌擎科技 1292

【制作100个unity游戏之30】使用unity实现一款2d俯视角RPG战斗游戏,主要使用InputSystem+有限状态机+A*寻路实现(完结,附带项目源码)

【制作100个unity游戏之30】使用unity实现一款2d俯视角RPG战斗游戏,主要使用InputSystem+有限状态机+A*寻路实现

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4651

【MYSQL】表的设计

表的约束,表的设计

yj20040627的博客 3942

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MySQL 系统学习 第三阶段:数据库设计(Database Design)

数据库设计的本质,是把现实业务中的对象和关系,转换成合理的数据结构。

flhhly的博客 183

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

《MySQL数据库原理设计与应用》课后习题及答案:全面解析数据库学习利器

《MySQL数据库原理设计与应用》课后习题及答案:全面解析数据库学习利器 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 提供《MySQL数据库原理、设计与应用》课后习题答案,助力数据库学习与实践。 项目介绍 在数据库学习的道路上,理论与实践相结合尤为重要。《MySQL数据库原理设计与应用》课后习题及答案项目正是为了满足这一需求而诞生的。该项目由知名教育培训机...

gitblog_06730的博客 527

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

mysql设计学习_Mysql数据库设计学习

1、 存储引擎创建表的时候,一般程序中我们都需要支持事务,所以我们一般使用的是InnoDB 存储引擎2、 命名规则a、所有的表应该有统一的项目前缀,表示为同一个项目的表格b、尽量保持至少三级,例如 act_hi_identitylink act第一级别表示是谁的表,hi表示那个模块的表 identitylink 具体功能的表c、字段名称与java代码相一致,java实体类保持驼峰原则,表之间用...

weixin_39606137的博客 83

mysql设计学习_《mysql学习》-- MySQL数据库设计总结

mysqlMySQL数据库设计总结规则1:一般情况可以选择MyISAM存储引擎,如果需要事务支持必须使用InnoDB存储引擎。注意:MyISAM存储引擎 B-tree索引有一个很大的限制:参与一个索引的所有字段的长度之和不能超过1000字节。另外MyISAM数据和索引是分开,而InnoDB的数据存储是按聚簇(cluster)索引有序排列的,主键是默认的聚簇(cluster)索引,因此MyISAM虽...

weixin_39968946的博客 92

MySQL学习5 - 索引、备份和规范数据库设计学习

它可以显著提高MySQL的检索速度,类似于书籍的目录,可以快速定位到所需内容。# mysqldump -h主机 -u用户 -p密码 库 表1,表2··· >物理磁盘位置/文件名。# mysqldump -h主机 -u用户 -p密码 库 表 >物理磁盘位置/文件名。避免重复的列出现,唯一的列可以重复,多个列都可以标识为唯一索引。考虑商业化的需求目标,(成本,用户体验)数据库的性能更加重要。在规范性能的问题的时候,需要适当的考虑一下规范性。分析需求:分析业务和需求处理的数据库的需求。

2302_77058698的博客 923

数据库必读书单:从《Database System Concepts》到《高性能 MySQL》

先介绍奠定理论基础的《Database System Concepts》和《数据库系统概论》,接着讲解实践操作的《SQL 必知必会》《MySQL 必知必会》,然后阐述数据库设计与建模的《数据库设计与开发》《数据模型与数据库设计》,最后说明进阶与优化的《高性能 MySQL》《Redis 设计与实现》等。通过阅读这本书,读者可以深入了解 Redis 的工作原理,掌握 Redis 的高级应用和性能优化方法,在实际项目中更好地发挥 Redis 的优势,提高系统的响应速度和并发处理能力。

2503_92848840的博客 861

# MySQL 学习进阶路线-基础篇:从SQL语法到数据库设计的实战指南

基础篇核心要点掌握 SELECT、JOIN、子查询的灵活组合。遵循三范式设计表结构,平衡规范与性能。善用索引优化查询,避免全表扫描。学习建议动手实践:在本地安装 MySQL,导入测试数据(如Sakila 示例数据库调试技巧:使用EXPLAIN分析 SQL 执行计划,定位性能瓶颈。社区资源:关注 优快云 的 MySQL 专栏,参与技术讨论。欢迎在评论区留言交流!你的每一个问题或建议,都是我持续创作的动力!

weixin_49306340的博客 1271

MySQL学习总结--数据库的设计

1. 多表之间的关系 1. 分类: 1. 一对一(了解): * 如:人和身份证 * 分析:一个人只有一个身份证,一个身份证只能对应一个人 2. 一对多(多对一): * 如:部门和员工 * 分析:一个部门有多个员工,一个员工只能对应一个部门 3. 多对多: * 如:学生和课程 * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择 2. 实现关系: 1. 一对多(多对一): * 如:部门和员工 * 实现方式:在多的一方建立外键,指

wushaoji321的博客 259

MySQL学习之数据库设计

数据库设计流程,数据库设计三大范式

Java学习博客 754

mysql 日志数据库设计_mysql学习日记——数据库范式设计

# # 数据库的设计*学习资源来源于互联网,仅供个人学习使用*1. 多表之间的关系1. 一对一(了解):* 如:人和身份证(一个人只有一个身份证,一个身份证只能对应一个人)* 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。2. 一对多(多对一):* 如:部门和员工 (一个部门有多个员工,一个员工只能对应一个部门)* 实现方式:在多的一方建立外键,指向一的一方的主键。3. ...

weixin_42299205的博客 420

【Mysql】数据库的设计学习笔记

主要是数据库的设计原则

Arcus 192

《Greenplum构建实时数据仓库实践》简介

先后供职于北京现代商业信息技术有限公司、北京在线九州信息技术服务有限公司、华北计算技术研究所、北京优贝在线网络科技有限公司,担任。分布式数据库具有可选存储模式、事务支持、并行查询与数据装载、容错与故障转移、数据库统计、过程化语言扩展等方面的功能特性,因此。、架构师等相关技术人员阅读,也适合高等院校大数据相关专业的师生作为实训教材。安装部署、实时数据同步、实时数据装载、维度表技术、事实表技术、数据库权限与角色管理、数据导入导出、性能优化、监控与维护。初学者、大数据分析系统设计与开发、数据仓库系统设计与开发、.

夏天又到了的专栏 1031

基于JavaEE的学习平台管理系统_JSP网站设计_MySQL数据库设计

qiaoyan9241的博客 85

<mysql-数据库设计与实现>学习总结

实例存放在行中,而将特性存放在列中。

lisz的博客 1606
上一篇: 《redis学习》-- 缓存淘汰策略
下一篇: 《mysql学习》-- 锁
fight_zhi
博客等级 码龄14年 27粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值