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

又谈mysql,面试官问表结构设计要注意啥?

资金以分单位代替元单位存储 类型 DECIMAL 是通过二进制实现的一种编码方式,计算效率远不如整型的高效。因此,推荐使用 BIG INT 存储金额相关的字段。 4....才能将已经存在的的字符集进行修改。...排序规则 排序规则(Collation)是比较和排序字符串的一种规则,每个字符集都会有默认的排序规则,可以使用命令 SHOW CHARSET 查看: mysql> SHOW CHARSET LIKE...第一范式的基础上更进一步,解决部分依赖,目标是确保表的每都和主键相关。 第三范式(3NF) 概念:所有的非主属性不依赖于其他的非主属性。...反范式化指的是通过增加冗余或重复的数据换时间增加效率,违反第二第三范式。 反范式化可以减少关联查询时,join表的次数。 一些场景下,可以通过 JSON 数据类型进行反范式设计,提升存储效率。

72320

MySQL数据类型概述-时间

MySQL,日期和时间数据类型用于存储日期、时间或日期时间值。日期和时间数据类型查询和排序数据时非常有用,并且可以进行各种日期和时间计算。...id列为整数类型,使用AUTO_INCREMENT属性来自动递增。create_time列为DATETIME类型,用于存储记录创建时间。...YEAR类型YEAR类型用于存储年份值,它只使用1个字节存储,并且可以存储范围为'1901'到'2155'之间的值。...id列为整数类型,使用AUTO_INCREMENT属性来自动递增。year_of_birth列为YEAR类型,用于存储出生年份。日期和时间类型可以用于比较、计算和格式化。...这些函数可以查询数据时非常有用,并且可以根据需要组合使用

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

SQL 进阶挑战(6 - 10)

FROM [数据表名] WHERE [条件语句] ORDER BY [字段名] LIMIT [数量]; 要删除未作答或作答时间小于 5 分钟的记录,需要用到关键字 OR 将两个条件并联,其次,要对结果进行排序...1001, 9002, '2020-01-02 09:01:01', '2020-01-02 09:06:00', 58); 输出: 0|None 解答 题目中是需要删除所有记录并重置自增计数器,所以此时可以直接使用...| NOT NULL -- 该非空 ], ... ) [CHARACTER SET charset] -- 字符集编码 [COLLATE collate_value] -- 排序和比较时的规则(...是否区分大小写等) 然后按照上述语法,套入相关字段即可。...YES||CURRENT_TIMESTAMP|DEFAULT_GENERATED|select,insert,update,references|注册时间 解答 主要考察数据表结构的修改,主要语法如下: 已有后新增列

35330

【笔记】Mysql 数据库操作规范

【数据类型存储空间需求说明】 强烈建议使用 TINYINT 代替 ENUM 类型。[FAQ-4-04] 禁止使用 TEXT、BLOB 类型。 禁⽌在数据库存储明文密码。...合理使用覆盖索引减少 IO,避免排序。[FAQ-5-05] 6. SQL设计规范: 使⽤ prepared statement,可以提升性能并避免 SQL 注入。 ⽤ IN 代替 OR。...【FAQ-4-04】 强烈建议使用 TINYINT 代替 ENUM 类型。ENUM 类型需要修改或增加枚举值时,需要在线 DDL,成本较高;ENUM 值如果含有数字类型,可能会引起默认值混淆。...【FAQ-5-05】 合理使用覆盖索引减少 IO,避免排序。覆盖索引能从索引获取需要的所有字段,从⽽避免回表进行⼆次查找,节省 IO。...覆盖索引则可以一个索引获取所有需要的数据,因此效率较高。主键查询是天然的覆盖索引。

1.4K20

数据库表结构设计方法及原则「建议收藏」

也就是说一个数据库表,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表;第三范式需要确保数据表的每一数据都和主键直接相关,而不能间接相关。...四个范式确保了不会出现异常,但也可能由此导致过于纯洁的设计,使得表结构难于使用,所以设计时需要进行综合判断,但首先确保符合四个范式,然后再进行精化修正是刚刚进入数据库设计领域时可以采用的最好办法。   ...可空需要更多的存储空间,还需要mysql内部进行特殊处理,当可空被索引时,每条记录都需要一个格外的字节。 即使要在表存储”没有值”的字段,考虑使用0,特殊字段或者空字符串代替。   ...而只是按照max_sort_length规定的若干个字节进行排序。   6.采用enum代替字符串类型。mysql在内部把每个枚举值都保存为整数。...enum在内部是按照数字进行排序的,而不是按照字符串。enum最不好的就是字符串列表是固定的,添加和删除必须使用alter table。   7.ip地址,一般会采用varchar(15)保存。

2.2K30

MySQL数据库基础练习系列13、用户注册与登录系统

,让大家更好的深入项目进行实战式的练习,可以让大家在后面面试的时候有更多更丰富的资历让大家可以与面试官侃侃而谈。...字符集:utf8 排序规则:utf8_general_ci 使用工具:Navicat Premium 15,可以在下面的连接中下载 https://download.csdn.net/download...所以我们创建表的时候一定要按照一定的顺序创建,否则就会出现没有外键关系导致的创建异常。...每一都是不可再分的最小数据单元(也称为最小的原子单元)。 解释: 第一范式,主要关注的是的原子性。...第二范式,一个表只能保存一种数据,不可以把多种数据保存在同一张数据库表。 如果表的某一只与复合主键的一部分有关,那么它就不应该存在于这个表,而应该被分离出去形成另外一张新表。

9310

MySQL数据类型与优化

这招对内存创建大临时表和文件排序,以及存盘上创建大临时表和文件排序这两种情况都很有帮助。 6、MySQL不能将BLOB和TEXT全部长度的字符串进行索引,也不能使用这些索引消除排序。...7、PLUS:如果EXPLAIN执行计划的Extra包含"Using temporary",则说明这个查询使用了隐式临时表。 枚举(ENUM) 1、有时候可以使用枚举类型代替常用的字符串类型。...MySQL在内部会将每个值列表的位置保存为整数,并且表的.frm文件中保存"数字-字符串"映射关系的"查找表"。 2、枚举字段是按照内部存储的整数而不是定义的字符串进行排序的。...绕过这种限制的方式是按照需要的顺序定义枚举,另外也可以查询中使用FIELD()函数显式地指定排序顺序,但这会导致MySQL无法利用索引消除排序,如果定义时候就是按照字母顺序,就没有那么做的必要了。...总结:尽量使用TIMESTAMP,因为它比DATETIME空间效率更高。 标识符 1、整数通常是标志符最好的选择,因为它们很快并且可以使用AUTO_INCREMENT

1.5K10

MySQL-索引优化篇(2)_使用索引扫描优化排序

---- 使用索引扫描优化排序 存储引擎: Innodb 重点: 优化排序 手段:利用索引 两个思路: 1 通过排序操作 、 2 按照索引顺序扫描数据 ---- 索引的顺序和Order By子句的顺序完全一致...其他的字段都需要回表获取,所以 是using where . 5.7.29 版本的mysql的存储引擎是 Innodb,对于Innodb来讲,逻辑顺序和主键顺序是一致的,所以可以利用主键排序 ,上面...order by rental_id 就是利用主键排序 。...使用order by关键字的时候,如果待排序的内容不能由所使用的索引直接完成排序的话,那么MySQL有可能就要进行“文件排序” 【其实并不是从文件查找排序,不要误解】。...最左侧的索引 rental_date 使用范围查询 验证下 ? 结论: 如果查询中有某个的范围查询,则其右边所有都无法使用索引 ---- order by的字段全部关联表的第一张表

58970

MySQL 的索引查询以及优化技巧

考虑到decimal占用空间较多,以及精度计算很复杂,数据量大的时候可以考虑用bigint代替之,可以持久化和读取前对真实数据进行一些缩放操作。...如果某字符串大量重复且内容有限,可使用枚举代替,MySQL处理枚举时维护了一个“数字-字符串”表,使用枚举可以减少很多存储空间。...先用第一排序,然后是第二,最后是第三。 查询的使用应该尽量从左往右匹配,另外,如果左边范围查找,右边无法使用索引;还有就是不能隔查询,否则后面的索引也无法使用到。...是否向数据库请求了多余的 比如应用程序只需要展现5,但却通过select * from 把全部的都查了出来 是否重复多次执行了相同的查询 应用程序是否可以考虑一次查询然后缓存,后面的用到时可以使用第一次查询出来的记录...这里有一个传表达式的例子: SELECT count(name like 'B%') from people 可以使用近似值优化代替count(),如执行计划的行数。

1.1K00

10 分钟掌握 MySQL 的索引查询优化技巧

考虑到decimal占用空间较多,以及精度计算很复杂,数据量大的时候可以考虑用bigint代替之,可以持久化和读取前对真实数据进行一些缩放操作。...如果某字符串大量重复且内容有限,可使用枚举代替,MySQL处理枚举时维护了一个“数字-字符串”表,使用枚举可以减少很多存储空间。...是否向数据库请求了多余的 比如应用程序只需要展现5,但却通过select * from 把全部的都查了出来 是否重复多次执行了相同的查询 应用程序是否可以考虑一次查询然后缓存,后面的用到时可以使用第一次查询出来的记录...可以将一个大的关联查询改成分别查询若干个表,然后应用程序代码处理 杂七杂八 优化count() Count有两个作用,一是统计指定的或表达式,二是统计行数。...这里有一个传表达式的例子: SELECT count(name like 'B%') from people 可以使用近似值优化代替count(),如执行计划的行数。

95920

10分钟掌握数据类型、索引、查询的MySQL优化技巧

考虑到decimal占用空间较多,以及精度计算很复杂,数据量大的时候可以考虑用bigint代替之,可以持久化和读取前对真实数据进行一些缩放操作。...如果某字符串大量重复且内容有限,可使用枚举代替,MySQL处理枚举时维护了一个“数字-字符串”表,使用枚举可以减少很多存储空间。...8、索引使用总结 索引的三星原则: 索引将查询相关的记录按顺序放在一起则得一星 索引的数据顺序和查询结果的排序一致则得一星 索引包含了查询所需要的全部则得一星 第一个条原则的意思是where条件查询的顺序和索引是一致的...是否重复多次执行了相同的查询 应用程序是否可以考虑一次查询然后缓存,后面的用到时可以使用第一次查询出来的记录。...这里有一个传表达式的例子: SELECT count(name like 'B%') from people 可以使用近似值优化代替count(),如执行计划的行数。

78120

分布式系统ID生成方案汇总

分布式系统,需要对大量的数据、消息、请求等进行唯一的标识,例如分布式数据库的ID需要满足唯一且多数据库同步,单一系统使用数据库自增主键可以满足需求,但是分布式系统中就需要一个能够生成全局唯一...MySQL自增列使用auto_increment标识字段达到自增,创建表时将某一定义为auto_increment,则改列为自增列。这定了auto_increment必须建立索引。...auto_increment使用说明 如果把一个NULL插入到一个auto_increment数据,MySQL将自动生成下一个序列编号。...数据的值必须是唯一的;情况二,如果插入的值大于已编号的值,则会把该值插入到数据,并使在下一个编号将这个新值开始递增。...41位的时间截,可以使用69年,年T = (1L * 10位的数据机器位,可以部署1024个节点,包括5

1.1K20

Archery – SQL审核查询平台

本页目录 Archery说明 Archery搭建 Archery使用说明 禁止指定存储引擎:’base_file_record’ ‘created_by’ 不允许为null(表 ‘base_file_record...表 ‘base_dict’ 禁止设置排序规则!允许的排序规则 建议自增列初始值置为 1 ‘id’ 需要设置注释(表’base_grid_boundary’)....其他信息绝对会导致审核状态无法pass 表 ‘base_dict’ 禁止设置排序规则!...允许的排序规则 你表字段指定了COLLATE utf8mb4_bin 删除即可 建议自增列初始值置为 1 将:AUTO_INCREMENT=1 ‘id’ 需要设置注释(表’base_grid_boundary...字段最后添加:COMMENT ‘主键’, 如果是表没有注释,最后拼接 COMMENT ‘XXX表’ 自增列建议设置无符号标志unsigned(表’base_grid_boundary’).

1.8K30

MySQL 8.0DATE,DATETIME和 TIMESTAMP类型和5.7之间的差异

DATETIME可以使用DEFAULT和 ON UPDATE定义子句指定 自动初始化和更新到的当前日期和时间 TIMESTAMP[(fsp)] 时间戳。...也可以TIMESTAMP通过为其分配NULL值将任何设置为当前日期和时间 ,除非已使用NULL,允许NULL值的属性对其进行 了定义。...发生这种情况是因为没有两个方向上使用相同的时区进行转换。当前时区可作为time_zone系统变量。...从MySQL 8.0.19开始,可以向表插入TIMESTAMP和 DATETIME值时指定时区偏移量。...精确的行为取决于是否启用了严格SQL模式和NO_ZERO_DATE模式; MySQL 8.0.22和更高版本,可以转换 TIMESTAMP值UTC DATETIME使用提取它们的值 CAST()与AT

6.2K51

SQL优化思路+经典案例分析

存储引擎层进行数据过滤,而不是服务层过滤,利用索引现有的数据减少回表的数据。 1.2.5 key 该列表示实际用到的索引。一般配合possible_keys一起看。...如果单表数据量过大导致慢查询,则可以考虑分库分表 如果数据库刷脏页导致慢查询,考虑是否可以优化一些参数,跟DBA讨论优化方案 如果存量数据量太大,考虑是否可以让部分数据归档 我之前写了一篇文章,有关于导致慢查询的...,将所有数据根据age进行排序;遍历排序结果,取前10行,并按照id的值回到原表,取出city、name 和 age三个字段返回给客户端。...,将所有数据根据age进行排序; 按照排序结果取前10行返回给客户端。...如果要排序的数据小于sort_buffer_size,排序sort_buffer内存完成 如果要排序的数据大于sort_buffer_size,则借助磁盘文件进行排序

68710
领券