从字段类型的执行效率上,int最高,varchar最低。...状态类型字段,使用char或者varchar是不可取的,int类型更容易建立索引和进行检索,毕竟数字类型是数据库检索的基础,char类型的毕竟需要经过转换,而varchar就更复杂了,其排序不仅需要转换和计算...,还需要访问和遵循数据库的排序规则(实际上char也需要排序规则),而消耗的资源也更大。...因此,通常在数据库设计中,都是尽量使用int类型字段而不是字符类型字段,这在大型和超大型数据库的优化中,有明显的性能差异。
背景 同事在设计表,有一个字段为发票号码,在一般来讲发票号码的长度一般是8位,varchar类型, 他的意思是给20位,我的意思是给少点12位就够了。...于是又讨论到了varchar在MySQL中的存储方式。,以证明增加长度所占用的空间并不大。那么我们就看看varchar在mysql中到底是如何存储的。 ?...varchar类型在mysql中是如何定义的? 先看看官方文档: ? ?...另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。 ALL IN ALL 在MySQL数据库中,用的最多的字符型数据类型就是Varchar和Char.。...所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR数据类型时仍然不能够太过于慷慨。还是要评估实际需要的长度,然后选择一个最长的字段来设置字符长度。
本次的练习是:在单元格区域A1:A6中,有一些数据,有的是单独的数字,有的是由连字符分隔的一组数字,例如13-16表示13、14、15、16,现在需要将这些数据拆分并依次放置在列D中,如下图1所示。...实际上,这个值代表我们从A1:A6的各字符串中范围最大的字符串返回的数字数量。...因为这两个相加的数组正交,一个6行1列的数组加上一个1行4列的数组,结果是一个6行4列的数组,有24个值。...其实,之所以生成4列数组,是为了确保能够添加足够数量的整数,因为A1:A6中最大的间隔范围就是4个整数。...例如对于上面数组中的第4行{10,11,12,13},在last数组中对应的值是11,因此剔除12和13,只保留10和11。
新买的Macbook Air 升级了最新版的OS X 10.10 Yosemite,昨天在本地安装Ghost 的时候出现了问题,在这里做一个记录。...安装node 和 npm 整个过程Jeff 是通过http://docs.ghostchina.com/zh/installation/mac/ 的文档进行操作的,安装 node 和 npm 的话没问题...,虽然安装教程来果然出现了$PATH 环境变量无效的问题,但是按照文档操作也很快解决了。...安装Ghost报错 下载Ghost 后在终端打开并通过 npm install --production 编译,但是整个过程试了两三次,好像可以,但npm start 启动无效,终端窗口报错如下: ?...Amazon S3被墙(虽然我是在全局代理模式下安装的); 解决方案:通过 http://node-sqlite3.s3.amazonaws.com/Release/node_sqlite3-v2.1.
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。...返回达标数组的数量。 1 <= n <= 500, 1 <= m <= 10, 500 * 10 * 10 * 10, 结果对998244353取模, 实现的时候没有取模的逻辑,因为非重点。...// f、s、t : ends数组中放置的数字!...// n : 一共的长度! // m : 每一位,都可以在1~m中随意选择数字 // 返回值:i..... 有几个合法的数组!...// 尤其是理解ends数组的意义! fn number2(n: i32, m: i32) -> i32 { //repeat(vec!
2022-12-22:给定一个数字n,代表数组的长度,给定一个数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度为n的数组中,最长递增子序列长度为3的数组,叫做达标数组。返回达标数组的数量。...1 的时候没有取模的逻辑,因为非重点。来自微众银行。...// f、s、t : ends数组中放置的数字!...// n : 一共的长度!// m : 每一位,都可以在1~m中随意选择数字// 返回值:i..... 有几个合法的数组!...// 尤其是理解ends数组的意义!fn number2(n: i32, m: i32) -> i32 { //repeat(vec!
在SQL Server中,数据的存储以页为单位。八个页为一个区。一页为8K,一个区为64K,这个意味着1M的空间可以容纳16个区。 ...首先是LOB页,这类是用于存储存在数据库的二进制文件所设计,当这个类型的列出现时,在原有的列会存储一个24字节的指针,而将具体的二进制数据存在LOB页中,除去Text之外,VarBinary(max)也是存在...因为数字类型占用更小的存储空间。比如存储123456789使用INT类型只需要4个字节,而使用Varchar就需要9个字节(这还不包括Varchar还需要占用4个字节记录长度)。 ...首先我们建立表,这个表中只有两个列,一个INT类型的列,另一个类型定义为Char(5),向其中插入两条测试数据,然后通过DBCC PAGE来查看其页内结构,如图4所示。 ? ...当至少能够节省 20% 到 40% 的空间时,才应考虑使用稀疏列。 稀疏列在SSMS中的设置如图6所示。 ? 图6.稀疏列 更具体的稀疏列如何能节省空间,请参看MSDN。
字段类型选择 慷慨是不明智的 在相关的表中使用相同的数据类型,因为可能进行join 选择标示符:整数通常是最佳选择,尽量避免使用字符串 大致决定数据类型(数字,字符串,时间等) 选择存储更小的类型,选择更简单的类型...(如整数优于字符串),选择mysql内建时间类型而不是字符串,选择整数而不是字符串来保存IP 尽量避免使用NULL:任何包含null值的列都将不会被包含在索引中。...表中最多只有一行匹配的记录,它在查询一开始的时候就会被读取出来。...由于只有一行记录,在余下的优化程序里该行记录的字段值可以被当作是一个恒定值。const表查询起来非常快,因为只要读取一次!...varchar需要额外的1~2字节(貌似一直是2个) 同时还需要考虑表所使用的字符集,不同的字符集,gbk编码的为一个字符2个字节,utf8编码的一个字符3个字节 ref 显示了哪些字段或者常量被用来和
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。 福大大 答案2021-06-16: 方法一:自然智慧。递归。 方法二:动态规划。...思路: 定义dpi : 表示arr0...i范围上,在不能取相邻数的情况下,返回所有组合中的最大累加和 在arr0...i范围上,在不能取相邻数的情况下,得到的最大累加和,可能性分类: 可能性 1) 选出的组合...getMax(a int, b int) int { if a > b { return a } else { return b } } // 给定一个数组...arr,在不能取相邻数的情况下,返回所有组合中的最大累加和 // 思路: // 定义dp[i] : 表示arr[0...i]范围上,在不能取相邻数的情况下,返回所有组合中的最大累加和 // 在arr[0......i]范围上,在不能取相邻数的情况下,得到的最大累加和,可能性分类: // 可能性 1) 选出的组合,不包含arr[i]。
当表中某列字符串类型的数据长度差别较大时适合使用varchar。 char的实际占用空间是固定的,当表中字符串数据的长度相差无几或很短时适合使用chart类型。...覆盖索引 简单地说,某些查询只需要查询索引列,那么就不用再根据索引B树节点记录的主键ID进行二次查询了。 重复索引和冗余索引 如果重复在某列创建索引,并不会带来任何好处,只有坏处,应该尽量避免。...索引中包含了查询所需要的全部列则得一星 第一个条原则的意思是where条件中查询的顺序和索引是一致的,就是前面说的从左到右使用索引。...MySQL是否在扫描额外的记录 通过查看执行计划可以大概了解需要扫描的记录数,如果这个数字超出了预期,尽可能通过添加索引、优化SQL(就是本节的重点),或者改变表结构(如新增一个单独的汇总表,专门供某个语句查询用...可以将一个大的关联查询改成分别查询若干个表,然后在应用程序代码中处理 杂七杂八 优化count() Count有两个作用,一是统计指定的列或表达式,二是统计行数。
当表中某列字符串类型的数据长度差别较大时适合使用varchar。 char的实际占用空间是固定的,当表中字符串数据的长度相差无几或很短时适合使用chart类型。...创建前缀索引时选择前缀长度很重要,在不破坏原来数据分布的情况下尽可能选择较短的前缀。...覆盖索引 简单地说,某些查询只需要查询索引列,那么就不用再根据索引B树节点记录的主键ID进行二次查询了。 重复索引和冗余索引 如果重复在某列创建索引,并不会带来任何好处,只有坏处,应该尽量避免。...MySQL是否在扫描额外的记录 通过查看执行计划可以大概了解需要扫描的记录数,如果这个数字超出了预期,尽可能通过添加索引、优化SQL(就是本节的重点),或者改变表结构(如新增一个单独的汇总表,专门供某个语句查询用...可以将一个大的关联查询改成分别查询若干个表,然后在应用程序代码中处理 杂七杂八 优化count() Count有两个作用,一是统计指定的列或表达式,二是统计行数。
2021-06-16:返回一个数组中,选择的数字不能相邻的情况下, 最大子序列累加和。 福大大 答案2021-06-16: 方法一:自然智慧。递归。 方法二:动态规划。...思路: 定义dp[i] : 表示arr[0...i]范围上,在不能取相邻数的情况下,返回所有组合中的最大累加和 在arr[0...i]范围上,在不能取相邻数的情况下,得到的最大累加和,可能性分类: 可能性...getMax(a int, b int) int { if a > b { return a } else { return b } } // 给定一个数组...arr,在不能取相邻数的情况下,返回所有组合中的最大累加和 // 思路: // 定义dp[i] : 表示arr[0...i]范围上,在不能取相邻数的情况下,返回所有组合中的最大累加和 // 在arr[0......i]范围上,在不能取相邻数的情况下,得到的最大累加和,可能性分类: // 可能性 1) 选出的组合,不包含arr[i]。
当表中某列字符串类型的数据长度差别较大时适合使用varchar。 char的实际占用空间是固定的,当表中字符串数据的长度相差无几或很短时适合使用chart类型。...6、重复索引和冗余索引 如果重复在某列创建索引,并不会带来任何好处,只有坏处,应该尽量避免。比如给主键创建唯一索引和普通索引就是多于的,因为InnoDB的主键默认就是聚簇索引了。...8、索引使用总结 索引的三星原则: 索引将查询相关的记录按顺序放在一起则得一星 索引中的数据顺序和查询结果的排序一致则得一星 索引中包含了查询所需要的全部列则得一星 第一个条原则的意思是where条件中查询的顺序和索引是一致的...MySQL是否在扫描额外的记录 通过查看执行计划可以大概了解需要扫描的记录数,如果这个数字超出了预期,尽可能通过添加索引、优化SQL(就是本节的重点),或者改变表结构(如新增一个单独的汇总表,专门供某个语句查询用...可以将一个大的关联查询改成分别查询若干个表,然后在应用程序代码中处理 3、杂七杂八 优化count() Count有两个作用,一是统计指定的列或表达式,二是统计行数。
例如一个列中的最大值为 2020,那就没必要选择 INT 以及更大的数据类型。 简单就好 简单的数据类型通常意味着处理时需要更少的 CPU 周期。...即括号中的数字只是用于控制显示的字符数,和实际可以存储的字符数无关。...CHAR 适合存储很短的字符串,或者所有值都接近同一个长度,例如存储密码的 MD5 值,或者用 CHAR(1)存储只有 Y 和 N 的值,因为 CHAR(1)需要一个字节,VARCHAR(1)需要两个字节...(需要一个记录长度的额外字节)。...选择标识符 标识符是用于标识列与其他值进行比较(例如关联操作中,通过标识列寻找其他列),标识列在选择数据类型时,应该跟关联表中的对应列一样的类型。
设计mysql表结构的时候,有很多数据类型供我们选择,下面来介绍下mysql8中常用的数据类型。...对于非常短的列,CHAR比VARCHAR在存储空间上也更有优势,例如用CHAR(1)来存储只有Y和N的值,如果采用单字节字符集只需1个字节,但是VARCHAR(1)却需要2个字节,因为还需要一个记录长度的额外字节...VARCHAR需要使用1或2个额外字节记录字符串的长度:如果列的最大长度小于或等于255字节,则只使用1个字节表示,如果列长度大于255字节,则需要使用2个字节表示长度。...假设采用latin字符集,一个VARCHAR(10)的列需要11个字节空间存储,一个VARCHAR(1000)的列则需要1002个字节空间存储,因为需要存储2个字节的长度信息。...当检索BIT的值时,结果是对应二进制表示的ASCII码转换后的字符,然而在数字上下文场景中检索的时候,会使用二进制表示的数字。
1. tinyint 接下来我们创建一个只有 tinyint 类型的表,然后分别插入 1 和 128,会发现 128 插入失败,因为越界插入了,超出类型范围: 说明: 在 MySQL 中,整型可以指定是有符号的和无符号的...1 没有出现任何东西,其实 bit 字段在显示时,是按照 ASCII码 对应的值显示,例如我们插入 65,其对应的ASCII码 值位 ‘A’: 如果我们有这样的值,只存放0或1,例如性别,只有男和女,...len值,和表的编码密切相关: varchar 长度可以指定为 0 到 65535 之间的值,但是有 1 - 3 个字节用于记录数据大小,所以说有效字节数是 65532; 当我们的表的编码是 utf8...时,varchar(n) 的参数 n 最大值是 65532/3=21844 (因为 utf 中,一个字符占用3个字节),如果编码是 gbk,varchar(n) 的参数 n 最大是 65532/2=32766...说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读。
7、人造键: 是由Oracle sequence产生的一个数字类型的列。 没有任何含义,只是为了唯一地标识实体中的记录。 从来不会被更新。 自然键: 可由多列组成并可包括任何数据类型。...优先选择VARCHAR2不是VARCHAR,VARCHAR将来会受到修改,以符合ANSI的标准。 13、B*树索引不能存储NULL,因此需要全表扫描来查找NULL值。...对于数字类型,选择合适的默认值会有难度,例如,统计包含AGE字段,基于索引扫描或查询AGE列时,可能需要找出年龄不确定(UNKNOWN)的记录。...垂直分区(Vertical Partitioning):经常在全表扫描操作中访问到的列需要保留在主表中,较少访问的列则存储在第二章表中。 20、视图:给用户只有一张表的假象。...21、Oracle有时会允许将一张表物理地分割成多个数据段,同时让用户保留一个单一逻辑表的印象,例如: LOB数据通常会存储在单独的数据段。 索引组织表中,一些数据将被存储在溢出段中。
char与varchar的区别?如何选择?面试官提出的问题问题:请详细解释MySQL中CHAR与VARCHAR的区别,并根据实际应用场景给出选择建议。...对于VARCHAR列,只占用实际字符串长度加上一个或两个额外字节来记录字符串的长度。因此,存储的字符串是"test",VARCHAR列的长度会显示为4。...VARCHAR:优点:对于较短的字符串,VARCHAR比CHAR更节省存储空间,因为它只占用字符串实际需要的空间加上一个或两个额外字节来记录字符串的长度。...MySQL中decimal与float,double的区别面试官提出的问题问题:请阐述MySQL中decimal、float和double数据类型的区别,并给出它们在实际应用中的选择建议。...4大约7位十进制数字的精度double双精度浮点数,用于存储更高精度的近似数值数据8大约15位十进制数字的精度-- 创建一个包含decimal, float和double列的表CREATE TABLE
换句话说如果未来你想改某一列,你肯定要把这一列曾经的所有属性全部复制下来,在代码中对要改的字段修改,在重新提交一下。...由于只有一个比特位,只能插入0或1。 查询位类型数据时,通常按照 ASCLL码值 显示。例如,插入的 0 和 1 在 ASCLL码 中是 不可显示 的,因此查询时可能看不到内容。...说明:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读 【案例】: 有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]...因此,当我们在向一个 set 集合中插入的时候,这个数字代表的是 位图 。...换言之,可以选择一列作为主键,也可以选择多列作为主键 但是多个合起来做一个主键,都不一样可以插,有一个不一样可以插,只有多个同时和历史数据一样才会出现主键冲突。
来看极限边界情况,innodb为了记录一下varchar真实存储多少个字节,最多分配2个字节的空间去记录,2个字节16个比特位,全部为1,最大能记录的数字是2^16-1是65535个,innodb最大能记录...如果实际存储字节L > 127,varchar占用的真实字节数L需要分配2个字节才能表示。 为什么分界线是127? 在变长字段长度的编码中,选择127作为阈值,是基于兼顾存储效率和容量需求的考虑。...但是还需要考虑到InnoDB的元数据和内部碎片等空间,由于这些额外的开销,无法在一个VARCHAR(16383)字段中存储16383个字符。...在原始的表中,data列只会存储一个20字节的指针,这个指针指向实际数据的存储位置。 ...在MySQL 5.7之前,会将数据(前768字节)存储在行内,768字节是一个权衡结果,旨在平衡行内存储的效率和外部存储访问的需求,选择这个大小是基于常见的查询模式和数据存储效率的考虑。
领取专属 10元无门槛券
手把手带您无忧上云