Schema与数据类型优化

MySQL之Schema设计与数据类型优化:避坑指南与实践 大家好!在技术学习和实践的道路上,我一直期望能和大家共同进步,分享经验。今天,咱们聚焦于MySQL的Schema设计与数据类型优化,这两个方面对于构建高效的数据库系统至关重要。希望通过这篇文章,能帮助大家深入理解相关知识,在实际应用中避免常见错误,提升MySQL数据库的性能和稳定性。 阅读详情

关于数据类型选择的一些记录

选择优化的数据类型

  • 更小的通常更好。一般应该尽可能使用能正确存储数据的最小数据类型,更小的数据类型通常更快,因为他们占用更少的磁盘、内存和CPU缓存,并且处理需要的CPU周期更少。
  • 简单就好。整型比字符串操作代价更低。
  • 尽量避免null。可为NULL的列使得索引、索引统计和值比较都更复杂。NULL列被索引的时候,每个索引记录都需要一个额外的字节。NULL列会使用更多的存储空间,在MySQL也需要特殊处理。(通常把可为NULL的列改为NOT NULL带来的性能提升比较小,但是如果打算在这个列上建索引,那就应该避免设计为可为NULL。)
  • 大类型: 整型 > 字符串 > 时间

整型类型

TINYINT(8), SMALLINT(16), MEDIUMINT(24), INT(32), BIGINT(64) 可选属性:UNSIGNED。MySQL可以为整型指定宽度,如int(11),但大多数时候没有意义,只是规定了一些交互工具用来显示字符的个数。

实数类型

  • FLOAT, DOUBLE, DECIMAL(可以指定前后所允许的最大位数,这会影响列的空间消耗)
  • CPU支持原生浮点计算,DECIMAL的高精度计算是MySQL服务器自身实现的,所以浮点运算明显更快。
  • 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL。
  • 但在数据量比较大的时候,可以考虑使用BIGINT代替DECIMAL,这样可以避免浮点存储计算不精确和DECIMAL精确计算代价高的问题。

字符串类型

从MySQL4.1开始,每个字符串列可以自定义自己的字符集和排序规则,或者说校对规则,这些东西对性能影响很大。

  • VARCHAR: 用于存储变长字符串,使用额外的存储空间来存储字符串长度。如果UPDATE时使得行比原来更长,这时需要额外的工作,MyISAM会将行拆分成不同的片段存储,InnoDB则需要分裂也来使行可以放进页内。会保留存储字符串的末尾空格。
  • VARCHAR适用于字符串列的最大长度比平均长度大很多;列更新很少,所以碎片不是问题;使用了像UTF8这样负责的字符集,每个字符使用不同的字节数进行存储。
  • CHAR:定长,会删除字符串末尾空格
  • CHAR适合存储定长或长度接近的数据;对于经常变更的数据CHAR不容易产生碎片;对于非常短的列CHAR在存储空间上更有效率。
  • VARCHAR(5), VARCHAR(200)存储'HELLO'的代价是一样的,但是使用更短的列依旧有优势:更长的列会消耗更多的内存,因为MySQL通常分配固定大小的内存块来保存内布值。尤其是使用内存临时表进行排序或操作时会特别糟糕。磁盘临时表也同样。

  • BLOB和TEXT类型,存储大数据,分别采用二进制和字符方式。MySQL会把BLOB和TEXT当作一个独立的对象处理,存储引擎在存储的时候通常会做特殊处理,如果值过大,则在外部区域存储,行内需要1-4个字节存储指针。BLOB没有排序规则或字符集,TEXT有。

  • 使用枚举(ENUM)代替字符串。对于枚举类型在表.frm文件中会保存“数字-字符串”的映射关系,行内存储的是值在列表中的位置(从1开始),排序的时候是按照列表中声明的顺序,使用枚举类型可以减少表的大小。

  • 枚举类型最大的缺点在于增加或删除字符串的时候必须使用ALTER TABLE, 除非只是在末尾添加字符串,不然需要重建整个表。枚举列在进行关联查询的时候,如果和CHAR OR VARCHAR关联,性能会比较差甚至不如直接用字符串,但是枚举和枚举关联,性能不错。在某些情况下,即使可能出现ENUM和VARCHAR关联的情况这也是值得的,因为可以减少I/O。

日期和时间类型

  • DATETIME可表示1001-9999年,精确到秒;
  • TIMESTAMP表示1970-2038年,保存了从1970-01-01午夜到现在的秒数,显示的值与时区有关。
  • FROM_UNIXTIME():从时间戳到日期,UNIX_TIMESTAMP():从日志到时间戳,通常TIMESTAMP比DATETIME空间效率更高。

位数据类型

  • BIT: BIT列最长64为。BIT(64)需要8个字节来存储。MySQL把BIT当作字符串类型而非数字类型,所以查询BIT列的时候得到的是所存储的二进制值作为ASCII码对应的字符串,如果用BIT列和其他数字比较或计算,那么查询到的是数字。这个相当费解,建议谨慎使用。
  • SET: 在MySQL内部以一系列打包的位的集合来表示,可以有效的利用存储空间,并且有FIND_IN_FIELD(), FIELD()这样的函数可以在查询时使用。主要缺点是改变列的定义代价比较大。
  • 一种替代SET的方案就是用一个整数包装一系列的位。类似于Linux文件系统的权限管理那样。

选择标识符

  • 选择标识符的时候不仅要考虑存储类型,还要考虑到MySQL对于这种类型如何执行计算和比较。例如,存储ENUM和SET使用整型,比较的时候转换为字符串。
  • 一旦选定类型,尽量确保所有关联表中都使用相同的类型。类型之间需要精确匹配,包括像UNSIGNED这样的属性。混用不同类型可能导致性能问题,像ENUM和VARCHAR做关联,即使没有性能问题,在比较操作做隐式转换的时候也可能导致很难发现的错误。
  • 在可以满足值的范围,并且预留了未来增长空间的前提下,应该选择最小的数据类型。
  • 整数类型最优先选择,很快且可以AUTO_INCREMENT
  • ENUM,SET比较糟糕
  • 字符串类型,尽量避免。很消耗空间,比数字类型慢,而且在MyISAM表里默认对字符串使用压缩索引,这会导致查询慢很多。
  • 对于完全随机的字符串也需要多注意,MD5(),SHA1()和UUID(),这会导致INSERT和SELECT很慢。
    • 字符串随机写到索引的不同位置,所以INSERT慢,还会导致页分裂,磁盘随机访问。
    • SELECT慢是因为逻辑相邻的列,物理上不一定相邻。
    • 随机值导致缓存对所有类型的查询语句效果都很差,因为会使缓存赖以工作的访问局部性原理失效。
  • 存储UUID值应当移除“-”符号,或者更好的做法是用UNHEX()函数转换为16字节的数字,存储在BINARY(16)列中,查询的时候通过HEX()来格式化为16进制格式。UUID值虽然分布也不均匀,但是还是有一定顺序。

特殊类型

IP地址: 通过INET_ATON()和INET_NTOA()函数在IP地址和无符号整数之间做转换。

范式和反范式

  • 范式优点:
    • 范式化的更新操作比反范式化要快
    • 当数据较好地范式化的时候,就只有很少或者没有重复数据,所以只需要修改更少的数据
    • 范式化的表通常更小,可以更好的放在内存里,所以执行操作会更快
    • 很少有多余的数据意味着检索列表数据时更少需要DISTINCT和GROUP BY这样的语句。
  • 范式缺点:
    • 通常需要关联
    • 代价昂贵,也可能是一些索引策略无效
  • 反范式优点:
    • 不需要关联查询
  • 反范式缺点:
    • 数据冗余
    • 更新和插入操作需要做更多

缓存表和汇总表

这个感觉就看具体需求了,对于缓存或者汇总的数据实时性要求有多高,然后采取不同的策略。

影子表:是指在一张真是表“背后”创建同样的表,然后建好之后通过原子的重命名操作切换。

mysql> DROP TABLE IF EXISTS my_summary_new, my_summary_old;
mysql> CREATE TABLE my_summary_new LIKE my_summary;
mysql> RENAME TABLE my_summary TO my_summary_old, my_summary_new TO my_summary;

物化视图

MySQL并不支持物化视图,可是使用开源工具Flexviews来实现。

加快ALTER TABLE的速度

ALTER TABLE一般都很慢,操作将导致MySQL服务中断。一般来说是会新建个表,然后从旧表读取数据插入到新表中,这样效率很慢。

但并不是所有的都这么慢,比如修改一个列的默认值有两种办法:

mysql> ALTER TABLE film MODIFY COLUMN rental_duration TINYINT(3) NOT NULL DEFAULT 5;

mysql> ALTER TABLE file ALTER COLUMN rental_duration TINYINT(3) NOT NULL DEFAULT 5

第一种方法是通过上面所说的读取插入的方式。 第二种方法会直接修改.frm文件不涉及数据,所以很快。

下面有一些修改表的操作是不需要重建表的:

  • 移除一个列的AUTO_INCREMENT属性
  • 增加、移除或更改ENUM和SET常量。如果移除的是已经有行用到的,查询将返回一个空字符串。

基本思路是为想要的表结构创建一个新的.frm文件,然后替代已有的那个:

  • 创建相同结构的表,并进行修改
  • 执行FLUSH TABLES WITH READ LOCK。这将关闭所有正在表,并且禁止任何表被打开。
  • 交换.frm文件
  • 执行UNLOCK TABLES释放锁。

为InnoDB表增加索引的时候也可以尝试一种比较骇客的方法(官方并不支持,注意备份数据):

  • 用需要的表结构创建一张表,但是不包括索引。
  • 载入数据到表中以构建.MYD文件
  • 按照需要的接口创建另外一张空表,这次包含索引。这会创建需要的.frm和.MYI文件。
  • 获取读锁并刷新表。
  • 重命名第二张表的.frm和.MYI文件,让MySQL以为是第一张表的文件。
  • 释放读锁。
  • 使用REPAIR TABLE来重建表的索引。
MySQL之Schema与数据类型优化:提升性能的关键步骤 大家好!在技术学习的道路上,我一直希望能和大家携手共进,共同攻克各种技术难题。今天咱们来深入探讨MySQL中Schema与数据类型优化的相关知识,这对提升MySQL性能至关重要。希望通过这篇文章,大家能更好地理解如何优化MySQL的架构和数据存储方式,在实际项目中提高系统的运行效率。 阅读详情

相关推荐

【嵌入式原理系列-第七篇】ld脚本实战:从零构建MCU内存布局

本文是一篇针对嵌入式开发者的实战指南,详细讲解了如何从零开始为MCU编写ld链接器脚本以构建自定义内存布局。文章以STM32F103C8T6为例,深入剖析了MEMORY和SECTIONS指令的用法,并提供了OTA分区、非易失数据存储等高级定制案例,帮助开发者解决实际工程中的Flash与RAM管理难题,实现对程序运行的深度掌控。

weixin_29271263的博客 248

查看MySQL数据库的SQL语句的执行记录日志

查看MySQL数据库的SQL语句的执行记录日志 方法1:可以使用processlist查看SQL执行语句,但是有个弊端,就是只能查看正在执行的sql语句,无法查看历史执行的语句。 > use information_schema; > show processlist; 或者 > select * from information_schema.`PROCESSLIST` ...

sunny05296的博客 2万+

单细胞RNA测序数据分析与可视化:从基础原理到高级应用

单细胞RNA测序(scRNA-seq)技术通过解析单个细胞的基因表达谱,显著提升了我们对细胞异质性的理解。本文详细介绍了scRNA-seq数据分析的完整流程,包括数据预处理、质量控制、降维、聚类、差异表达分析、细胞类型注释、细胞周期分析、轨迹分析、RNA速率分析、基因集富集分析、细胞通讯分析、批次效应校正以及空间转录组学整合。文章还展示了scrna_toolkit包在简化分析流程和增强数据可视化方面的应用。通过这一工具,研究者可以更高效地处理单细胞数据,揭示复杂的生物学信息。未来,该工具将进一步整合多组学分

2301_80338712的博客 4129

Schema的数据类型

简答类型    内置的数据类型         1、基本的数据类型            string 表示字符串            boolean  布尔型            decimal  代表特定精度的数字            float   表示单精度32位浮点数字            double  表示双精度64位浮点数            duratio

javazilu的专栏 3673

断点回归(regression discontinuity design)学习笔记

本篇博文主要是对断点回归的一些学习和总结~ 学习材料如下: 1 断点回归设计RDD分类与操作案例 2 RDD断点回归, Stata程序百科全书式的宝典 3 断点回归设计的前沿研究现状, RDD 4 让“跳跃”更有意义:断点回归设计(RDD) 5 Stata: 断点回归 (RDD) 教程 6 怎么用通俗的语言解释断点回归?它与DID的区别是什么 7 Watering Down Environmental Regulation in China,Guojun He, Shaoda Wang, Bing Zhan

Claire_chen_jia的博客 9万+

关于基于Midas Civil API的二次开发——PyMiMi

现在写了第一条博客,希望是一个好的开始,能够每天抽出一两个小时或者更多的时间来写写代码,研究研究。我发现在我的工作中存在着大量的重复性工作,对于文档的开发是好办的,毕竟网上有现成库,只需要pip一下拿来用就好,但是对于Midas而言,在24版本之前官方都是没有一个可以使用的接口的,可能mct文件算半个?

ManiacsTraitor的博客 1848

mysql ft是什么_MySQL · 特性分析 · 到底是谁执行了FTWL

原标题:MySQL · 特性分析 · 到底是谁执行了FTWL什么是FTWLFTWRL是FLUSH TABLES WITH READ LOCK的简称(FTWRL),该命令主要用于保证备份一致性备份。为了达到这个目的,它需要关闭所有表对象,因此这个命令的杀伤性很大,执行命令时容易导致库hang住。如果它在主库执行,则业务无法正常访问;如果在备库,则会导致SQL线程卡住,主备延迟。 FTWRL通过持有以...

weixin_36408867的博客 729

Xilinx Aurora 8B/10B IP核详解和仿真

Xilinx Aurora 8b/10b IP核的详解,以及使用与仿真示例,对IP核的配置和如何仿真有非常详细的说明,除了对IP核官方文档的内容进行了解析以外,还对GTX引脚的选择等比较容易混淆和不好理解的地方进行了说明。最后对IP核的仿真运行进行了STEP BY STEP 的说明,对仿真的结果也进行了简要的说明。 该文档对Xilinx FPGA和ZYNQ SOC下 AURORA 8B/10B IP核的使用提供了一个快速上手的指导。

weixin_43354598的博客 1万+

MySQL- SQL执行计划 & 统计SQL执行每阶段的耗时

文章目录官方文档某些SQL查询为什么慢MySQL处理SQL请求的过程查询缓存对SQL性能的影响SQL预处理及生成执行计划造成MySQL生成错误的执行计划的原因 官方文档 https://dev.mysql.com/doc/ 如果英文不好的话,可以参考 searchdoc 翻译的中文版本 http://www.searchdoc.cn/rdbms/mysql/dev.mysql.com/do...

小工匠 2万+

详解如何用爬虫工具批量采集阿里巴巴批发网商品数据

本文主要介绍如何使用后羿采集器的智能模式,免费采集阿里巴巴批发网商品的批发价格、发货时间、是否代发等信息。 采集字段: 商品标题、商品链接、图片链接、标签1、标签2、标签3、价格、30天成交数、 评价、店铺 功能点目录: 如何对采集字段进行配置 如何采集列表+详情页类型网页 采集结果预览: 下面我们来详细介绍一下如何免费采集1688批发网的商品数据,我们以“羽绒服女”为例,具体步骤如下: 步骤一...

weixin_43777427的博客 1万+

基于STM32的电子时钟设计

基于STM32的电子时钟设计1、设计目的2、设计具体要求3、proteus仿真图4、程序代码 1、设计目的 (1)掌握使用KEIL MDK5进行软件开发的具体流程; (2)掌握硬件电路的设计方法; (3)掌握STM32微控制器的程序设计及代码编写方法。 2、设计具体要求 (1)通过STM32自带的实时时钟功能获取时间信息; (2)在OLED显示屏上显示日期、时、分、秒等时间信息; (3)通过按键可对时间信息进行修改; (4)具有闹钟设定功能; (5)加分项:自行增加其他功能。 3、proteus仿真图 4

唯一的博客 2万+

Schema数据类型

XML Schema数据类型

东风起的博客 485

安卓风控对抗实战:如何用AOSP定制ROM绕过Momo、AIDA64等检测(从环境搭建到设备画像)

本文详细解析了如何通过定制AOSP ROM绕过Momo、AIDA64等安卓风控检测工具的设备指纹识别。从环境搭建到硬件参数修改,再到内核级特征混淆,提供了一套完整的底层对抗方案,显著提升设备伪装通过率。

weixin_30687051的博客 489

mysql的schema和数据类型优化

前言: 优秀的设计和逻辑是高性能的基本保障,我们来看下关于mysql使用schema和数据类型优化的一些建议和原则。 1.选择优化的数据类型的常用规则 更小的通常更好 一般选择更小的数据类型能满足业务场景的需求,小的数据类型意味着更小的cpu开销,更小的内存,储存空间的使用,可以提高效率。 简单的数据类型 整型的数据类型比字符型,浮点型数据要来的简单,处理起来也更方便。 尽量避免使用NULL 如果不是必须要储存NULL值的话,一般情况下都要指定列为NOT NULL。可以为NULL的列会使用更多的空间,使用

我想问问天的专栏 261

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【MySQL原理系列】- Schema与数据类型优化

在 MySQL 中,Schema(架构)和数据库(Database)基本是同义的概念。创建一个 Schema 实际上就是创建一个数据库,所有属于该数据库的表和其他对象都归属于这个 Schema良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计schema:比如反范式的设计可以加快某些类型的查询,但同时可能使另一些类型的查询变慢比如添加计数表和汇总表是一种很好的优化查询的方式,但这些表的维护成本可能会很高MySQL独有的特性和实现细节对性能的影响也很大。

m0_68383079的博客 950

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Mysql数据类型优化与Schema优化

数据类型: 最小的通常是最好的:修改数据类型是耗时和痛苦的,选择确认不会超过范围最小的类型。 类型越简单越好 尽量避免命用null: 使用null对mysql更难优化,特别是对需要建立索引的列 字符串类型对比 varchar: 变长,节省空间,适用于最长的字符串比平均长度要长很多,且修较少的字段 char :定长,浪费空间 使用enum代替字符串类型 Sechma设计陷阱  太多的列...

tony820418的专栏 262

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MySQL精进之路——Schema与数据类型优化

本文介绍了MySQL数据库设计中的数据类型选择和schema设计优化。主要内容包括: 数据类型选择原则:更小的更好、简单为佳、避免NULL,并详细比较了整数、实数、字符串、日期时间等类型的适用场景。 schema设计陷阱:避免过多列和关联、谨慎使用ENUM和NULL,注意MyISAM与InnoDB的行结构转换开销。 范式与反范式的权衡:范式化减少冗余但增加关联,反范式化提升查询性能但增加维护成本,建议根据查询模式混合使用。 特别强调了标识符类型选择、时间类型存储差异以及大文本字段处理的注意事项。

weixin_52344200的博客 769

MySQL 高效 Schema 设计与数据类型优化指南

摘要:本文详细介绍了MySQL数据库设计中的关键原则和优化策略。主要内容包括:1.数据类型选择原则,强调使用最小合适类型、避免NULL值;2.各类数据类型的特性比较(整数、实数、字符串、日期时间等)及适用场景;3.范式与反范式的优缺点及混合使用策略;4.缓存表和汇总表的应用技巧;5.ALTER TABLE操作的优化方法。文章特别指出,良好的MySQL设计应保持简单、使用合适的数据类型,并平衡范式化与反范式化设计。同时提供了针对大表操作、标识符选择等具体场景的实用建议,帮助开发者在性能和可维护性之间取得平衡。

cncs_hope的博客 637

设置mysql的schema_详解MySQL中的数据类型和schema优化

最近在学习MySQL优化方面的知识。本文就数据类型和schema方面的优化进行介绍。1. 选择优化的数据类型MySQL支持的数据类型有很多,而如何选择出正确的数据类型,对于性能是至关重要的。以下几个原则能够帮助确定数据类型:更小的通常更好应尽可能使用可以正确存储数据的最小数据类型,够用就好。这样将占用更少的磁盘、内存和缓存,而在处理时也会耗时更少。简单就好当两种数据类型都能胜任一个字段的存储工作时...

weixin_39598308的博客 287

MySQL优化系列5-Schema与数据类型优化

备注:测试数据库版本为MySQL 8.0 文章目录一.Schema与数据类型优化概述二.选择优化的数据类型2.1 整数类型2.2 实数类型2.3 字符类型2.4 日期和时间类型2.5 其它类型三.范式和反范式四.计数器表五.加快ALTER TABLE操作的速度5.1 预留列5.2 更改表定义文件5.3 MySQL 8.0 快速加列5.3.1 快速加列支持类型5.3.2 立刻加列的限制5.3.3 立刻加列的实现参考: 一.Schema与数据类型优化概述 良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要

只是甲的博客 3816

高性能MySql-Schema与数据类型优化

Schema与数据类型优化 更小的通常好 尽量使用可以正确存储数据的最下数据类型,更小的数据类型通常更快,占用更小的磁盘,内存和cpu缓存,并且处理时需要的cpu周期更少 但是要确保没有低估需要存储的值的范围,因为在schema中的多个地方增加数据类型的范围是一个非常耗时和痛苦的操作。如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型 简单就好 简单数据类型的操作通常需...

u010391342的博客 297

MySQL 之 Schema与数据类型优化

Schema与数据类型优化 良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计SCHEMA,这往往需要权衡各种因素。如:反范式设计可以加快某些类型的查询,但同时可能会使另一些查询变慢和占用更多的存储空间。可能会导致表的维护成本提高。MYSQL独有的特性和实现细节对性能的影响也很大。 选择优化的数据类型MYSQL的数据类型非常多,选择正确的数据类型对获得高性能至关重要。...

绝世小逗比 326

4、Schema与数据类型优化

良好的逻辑设计和物理设计是高性能的基石,应该根据系统将要执行的查询语句来设计schema,这往往需要权衡各种因素。例如,反范式的设计可以加快某些类型的查询,但同时可能使另一些类型的查询变慢。比如添加计数表和汇总表时一种很好的优化查询的方式,但这些表的维护成本很高。

javaJasonjava的博客 436

MySQL - Schema与数据类型优化

Schema与数据类型优化 良好的逻辑设计和物理设计是高性能的基石,应根据系统要执行的查询语句来设计schema。 MySQL支持的数据类型非常多,选择正确的数据类型是获得高性能的前提。 选择数据类型的原则 更小的通常更好 更小的数据类型通常更快,占用更少磁盘、内存和CPU缓存,并且处理时需要的CPU周期也更少。 注意没有低估值的取值范围,因为后期扩大数据类型是一个非常耗时和痛苦的操作。 ...

李思净的博客 242
上一篇: Lock wait timeout
下一篇: 创建高性能索引
java_4_ever
博客等级 码龄16年 8粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值