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

MySQL 常见面试题及其答案

4、什么是主键主键是一种用于唯一标识表中每行数据字段字段集合。主键必须满足以下条件: 唯一性:主键值必须唯一。 非空性:主键值不能为空。 不可变性:主键值不能更改。 5、什么是外键?...外键是一种用于建立两个表之间关联字段。外键通常指向另一个表中主键。 6、什么是索引? 索引是一种用于加速查询数据结构。它可以使得数据库在查找数据更快地定位到需要数据。 7、什么是存储引擎?...使用OFFSET子句指定查询结果起始行号。 在应用程序中,可以通过更改LIMIT和OFFSET值来实现分页。 使用ORDER BY子句按特定字段排序查询结果。...使用子查询,可以在查询结果中使用计算字段,以实现更复杂分页。 22、如何在MySQL中实现事务? MySQL实现事务可以使用BEGIN,COMMIT和ROLLBACK语句。...MySQL中实现外键约束方法: 在创建表,使用FOREIGN KEY约束指定外键,指向另一个主键。 外键约束可以在CREATE TABLE或ALTER TABLE语句中指定。

7K31

mysql千万级分页查询SQL优化

拿订单列表查询举例,可以使用用户表里某个特殊字段进行筛选,性别等,这些字段肯定不会在订单表存储,所以必然会进行联表。 使用者常常有疑问: 为何页面只有 10 条数据,查询却如此之慢?...(1,2) limit 1000000,1) limit 10; ## 耗时:0.716s 优化缺陷:如果主键不是自增长uuid方式),则此方法失效;如果查询要求中需要针对一些字段进行过滤查询,...big_table中有一个data_type字段,取值范围1,2,3。...3、 通过沟通,得到另一个优化方向,可以前端分页组件异步加载。首先将数据列表展示出来,方便其它操作。前端调整逻辑,分别调用 2 次接口,获取数据接口、获取分页结果接口。...固做以下优化, left join 一并使用动态 sql 链接: 2.与需求方沟通后,查询列表可去掉排序规则,使用默认排序即可。

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

大型互联网公司使用数据库设计规范

字段生成整型,不建议使用组合主键, 自增id只作为虚拟主键,不建议与业务数据处理有关联关系,如果把控不好,会有问题(案例:AUTO_INCREMENT主键字段不要与业务有关联关系) ?...4、唯一键不和主键重复。每个业务实体表和关系表都应该至少有一个业务主键对应唯一索引。 5、索引字段顺序需要考虑字段值去重之后个数,个数多放在前面,就是数据分布。...4、禁止在where子句中对字段施加函数,to_date(add_time)>xxxxx,应改为:add_time >= unix_timestamp(date_add(str_to_date('20130227...13、建议使用合理分页方式以提高分页效率。...使用GROUP BY 默认会进行排序,当你不需要排序时,可以使用order by null,例如Select a.OwnerUserID,count(*) cnt from DP_MessageList

1.7K30

数据库技术:MySQL 基础和 SQL 入门,单表、约束和事务

sid = 3; -- 一次修改多个列, sid 为 2 学员,年龄改为 18,地址改为北京 UPDATE student SET age = 18, address = '北京'...只按照某一个字段进行排序,就是单列排序 -- 使用 salary 字段,对 emp 表数据进行排序 (升序/降序) # 默认升序排序 ASC SELECT * FROM emp ORDER BY salary...; # 降序排序 SELECT * FROM emp ORDER BY salary DESC; 组合排序 同时对多个字段进行排序,如果第一个字段相同就按照第二个字段进行排序,以此类推 -- 在薪水排序基础上...分组可以查询要分组字段,或者使用聚合函数进行统计操作。 -- 按照性别进行分组操作。...Database Rollback 数据库回滚:即在事务运行过程中发生了某种故障,事务不能继续执行,系统事务中对数据库所有已完成操作全部撤销,滚回到事务开始状态(在提交之前执行)。

1.5K20

SQLite 基础

t_student表中所有记录name都改为jack,age都改为20 十一、删除数据(delete) 格式 delete from 表名 ; 示例 delete from t_student ;...字段 ; select * from t_student order by age ; 默认是按照升序排序(由小到大),也可以变为降序(由大到小) select * from t_student order...by age desc ; //降序 select * from t_student order by age asc ; // 升序(默认) 也可以用多个字段进行排序 select * from...null,并且唯一 age 字段不能为 null,并且默认为1 十九、主键约束 如果 t_student 表中就 name 和age 两个字段,而且有些记录 name 和 age 字段值都一样...key,就说明是一个主键字段 主键字段默认就包含了not null 和 unique 两个约束 如果想要让主键自动增长(必须是integer类型),应该增加autoincrement create table

2.1K40

⑩③【MySQL】详解SQL优化

当页中删除记录达到MERGE_THRESHOLD(默认为页50%),InnoDB会开始寻找最靠近页(前或后)看看是否可以两个页合并以优化空间使用。...③尽量不要使用UUID做为主键或者作为其他自然主键身份证号。 ④在业务操作,尽量避免对主键修改。 3. order by 排序优化 order by 优化: ①....③多字段排序,一个升序一个降序,此时需要注意联合索引在创建规则(ASC\DESC)。...分组操作,多字段通过联合索引排序也是遵循最左前缀法则。...-- 如何建立合适索引:建议使用联合索引,可参考上文order by优化 5. limit 分页优化 一个常见又非常头疼问题就是大数据量分页:limit2000000,10,此时需要MySQL

20840

使用Spring Data JPA进行数据分页排序

一、导读 如果一次性加载成千上万列表数据,在网页上显示十分耗时,用户体验不好。所以处理较大数据查询结果展现时候,分页查询是必不可少。...分页查询必然伴随着一定排序规则,否则分页数据状态很难控制,导致用户可能在不同页看到同一条数据。那么,本文主要内容就是给大家介绍一下,如何使用Spring Data JPA进行分页排序。...@Id 指定这个字段为表主键 @GeneratedValue(strategy=GenerationType.IDENTITY) 指定主键生成方式,一般主键为自增的话,就采用GenerationType.IDENTITY...但是笔者不建议这样进行转换,因为前端展示一个分页列表,不仅需要数据,而且还需要一些分页信息。:当前第几页,每页多少条,总共多少页,总共多少条。...第一个findAll方法是按照author升序排序,再按照createTime降序进行排序 分页排序在一起 Pageable pageable = PageRequest.of(0, 10,Sort.by

3.7K20

MySQL进阶学习之SQL优化【插入,主键排序,分组,分页,计数】

插入数据,尽量选择顺序插入,选择使用AUTO_INCREMENT自增主键。 尽量不要使用UUID做主键或者是其他自然主键身份证号。 业务操作,避免对主键修改。...,默认索引叶子节点是从小到大排序,而此时我们查询排序时,是从大到小,所以,在扫描,就是反向扫描,就会出现 Backward index scan。...,birthday desc ; 因为创建索引,如果未指定顺序,默认都是按照升序排序,而查询,一个升序,一个降序,此时就会出现Using filesort。...多字段排序, 一个升序一个降序,此时需要注意联合索引在创建规则(ASC/DESC)。...分组操作,索引使用也是满足最左前缀法则。 5、limit优化 在数据量比较大,如果进行limit分页查询,在查询,越往后,分页查询效率越低。

2.1K30

MySQL数据库进阶-SQL优化

当页中删除记录到达 MERGE_THRESHOLD(默认为页50%),InnoDB会开始寻找最靠近页(前后)看看是否可以这两个页合并以优化空间使用。...自增主键 尽量不要使用 UUID 做主键或者是其他自然主键身份证号 业务操作,避免对主键修改 order by优化 Using filesort:通过表索引或全表扫描...,这种情况即为 using index,不需要额外排序,操作效率高 如果order by字段全部使用升序排序或者降序排序,则都会走索引,但是如果一个字段升序排序另一个字段降序排序,则不会走索引,explain...多字段排序,一个升序一个降序,此时需要注意联合索引在创建规则(ASC/DESC) 如果不可避免出现filesort,大数据量排序时,可以适当增大排序缓冲区大小 sort_buffer_size...(默认256k) group by优化 在分组操作,可以通过索引来提高效率 分组操作,索引使用也是满足最左前缀法则 索引为idx_user_pro_age_stat,则句式可以是

13510

Spring 全家桶之 Spring Boot 2.6.4(四)- Data Access(Part C JPA)

,Spring Data Commons提供了针对关系型数据库和非关系型数据库访问数据都基于Spring 提供统一标准,这个标准包含了增删改查、条件查询、排序以及分页操作。...CrudRepository:基本CRUD PagingAndSortingRepository:基本CRUD及分页排序...编写接口继承JpaRepository,拥有CRUD以及分页功能 定义符合规范方法名,接口中只要生命符合规范方法,既拥有对应功能 方法名 findByLastnameAndFirstname,...jpa自动配置项都在JpaProperties类中 启动主程序,会自动创建表,根据实体类属性及注解中声明表名、字段名以及主键增长方式创建。...可以确定已经id为1记录删除

1.2K30

MySQL复习笔记(2)-约束

ORDER BY关键字可以查询出结果进行排序 SELECT 字段 FROM 表名 WHERE 条件 ORDER BY 字段 [ASC|DESC]; []:表示可有可无 |:或者多个中选择一个 ASC...:升序(默认) DESC:降序 单列排序 单列排序就是使用一个字段排序 select * FROM '表名' order by '字段' DESC; 组合排序 组合排序就是先按第一个字段进行排序,如果第一个字段相同...是一页显示固定条数。假设我们一每页显示5条记录方式来分页。...KEY(字段); 删除主键 ALTER TABLE 表名 DROP PRIMARY KEY; 主键自增 需求:主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录,数据库自动生成主键字段值...字段类型 default 值 外键约束 一个表中字段引用另一个主键 主表: 主键所在表,约束别人表,数据给别人用 副表/从表: 外键所在表,被约束表,使用别人数据 创建外键 CREATE

87520

【MySQL】七种SQL优化方式 你知道几条

当我们继续删除2#数据记录 当页中删除记录达到 MERGE_THRESHOLD (默认为页 50% ), InnoDB 会开始寻找最靠近 页(前或后)看看是否可以两个页合并以优化空间使用...尽量不要使用 UUID 做 主键或者是其他自然主键身份证号。 业务操作,避免对主键修改。...如果未指定顺序,默认都是按照升序排序,而查询,一个升序,一个降序, 此时就会出现Using filesort 。...多字段排序 , 一个升序一个降序,此时需要注意联合索引在创建规则( ASC/DESC )。 D....用法: count ( * )、 count (主键)、 count (字段)、 count (数字) 按照效率排序的话, count( 字段 ) < count( 主键 id) < count

27040

医疗项目中所用到技术点——以MyBatis-Plus为技术案例

代码编译配置:在Idea中进行Java编译,需要进行相关配置,编译选项、Classpath设置、运行配置等。在Idea中选择“Run”菜单,进行相关配置。...:全局唯一id 2、MP主键策略 2.1 ASSIGN_ID MyBatis-Plus默认主键策略是:ASSIGN_ID (使用了雪花算法) @TableId(type = IdType.ASSIGN_ID...当指定了特定查询列,希望分页结果列表只返回被查询列,而不是很多null值 测试selectMapsPage分页:结果集是Map @Test public void testSelectMapsPage...system.out.println(result); } 2、逻辑删除 2.1物理删除和逻辑删除 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为...application.properties 加入以下配置,此为默认值,如果你默认值和mp默认一样,该配置可无 mybatis-plus.global-config.db-config.logic-delete-value

30620

掌握高性能SQL34个秘诀🚀多维度优化与全方位指南

掌握高性能SQL34个秘诀多维度优化与全方位指南本篇文章从数据库表结构设计、索引、使用等多个维度总结出高性能SQL34个秘诀,助你轻松掌握高性能SQL表结构设计字段类型越小越好满足业务需求同时字段类型越小越好字段类型越小代表着记录占用空间可能就越小...,页中存在记录就可能越多,相同IO次数加载数据就可能更多字段越小建立索引耗费空间就越小,如果该字段主键那么它还会在二级索引上存储,因此主键也是越小越好数字类型选择数字类型包括整形、浮点型、定点数类型在不同场景下可以选择不同类型整形整形通常是...1-2个字节记录可变长长度 varchar(255)前1个字节,255后2个字节,但也不是长度不超过255就全部都使用255,在某些存储引擎下会根据长度直接分配空间(memory),使用临时表默认使用...varchar)进行存储文件所在地址如果一定要存则使用BLOB相关类型存储二进制数据尽量满足主键递增主键最好考虑是递增,因为聚簇索引需要保证主键有序当主键递增,只需要在末尾增加记录即可当入库主键值无序时...,但又会频繁触发,可以考虑改为异步批量入库需要注意如果批处理操作中数量很多,考虑分批处理,每批处理一部分,避免成为长事务避免出现长事务在使用spring声明式事务,用很爽但稍微不注意就可能导致长事务比如一些没必要存在事务中读操作或者在同一个事务中

19531

MySQL 查询优化

分页就要走覆盖索引,因为性能比较高。...其实建索引原理就是磁盘I/O操作最小化,不在磁盘中排序,而是在内存中排好序,通过排序规则去指定磁盘读取就行,也不需要在磁盘上随机读取。 12....垂直分表其实就是经常使用数据和很少使用数据进行垂直切分,切分到不同库,提高单库数据容量,:前3个月之前交易记录就可以放另一个库中。 31....2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,:select id from t where num is null可以在num上设置默认值...:select id from t where num/2=100应改为:select id from t where num=100*2 9)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

3.8K111

浅谈MySQL分页查询工作原理

所以我们使用二级索引查询数据,如果查询字段在二级索引没办法完全覆盖,则需要回表。...根据主键 id 进行回表操作查询出对应行记录 数据汇总到 sort_buffer 按照name进行排序 排序结果集返回给客户端 2.2.2 rowid 排序 我们发现全字段排序会存在一个问题:...还是使用上述 sql 分析: 可以使用二级索引,所以先根据二级索引idx_price查询出满足过滤条件数据 根据主键 id 进行回表操作查询出对应行记录 排序字段name和主键 id 一起放入 sort_buffer...要解决这种深度分页问题首先应该在产品设计方面避免这种情况,还有就是我们在查询分页数据应该需要根据时间做好限制,减少数据,以及对前端传进来 start、limit 字段进行判断限制。...,然后进行分页过滤出我们需要主键 id,再去主键索引查询数据(因为排序字段就是我们二级索引字段,所以查询出来数据直接就是有序,无需再进行文件排序)。

1.2K30

原 荐 MySQL-性能优化-索引和查询优化

覆盖索引(Covering Indexes) 就是直接走索引,直接在内存中就拿到值,不需要查询数据库。 分页就要走覆盖索引,因为性能比较高。...其实建索引原理就是磁盘I/O操作最小化,不在磁盘中排序,而是在内存中排好序,通过排序规则去指定磁盘读取就行,也不需要在磁盘上随机读取。 12....垂直分表其实就是经常使用数据和很少使用数据进行垂直切分,切分到不同库,提高单库数据容量,:前3个月之前交易记录就可以放另一个库中。 31....2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,:select id from t where num is null可以在num上设置默认值...:select id from t where num/2=100应改为:select id from t where num=100*2 9)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

74040

MySQL-性能优化-索引和查询优化

分页就要走覆盖索引,因为性能比较高。...其实建索引原理就是磁盘I/O操作最小化,不在磁盘中排序,而是在内存中排好序,通过排序规则去指定磁盘读取就行,也不需要在磁盘上随机读取。 12....垂直分表其实就是经常使用数据和很少使用数据进行垂直切分,切分到不同库,提高单库数据容量,:前3个月之前交易记录就可以放另一个库中。 31....2)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,:select id from t where num is null可以在num上设置默认值...:select id from t where num/2=100应改为:select id from t where num=100*2 9)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描

83211

SpringBoot集成ElasticSearch时分页排序查询遇到坑每次只能返回10条数据

这是因为ElasticSearch为了查询速度,在默认情况下已经设置了分页数据只能返回10条,所以我们需要通过改变size(返回数据大小)去改变分页查询数据条数大小,若没有设置size只能是返回...查询要指定sort排序字段 在es中query查询如果不指定sort排序字段,翻页查询,可能会出现重复查询,分页混乱问题。...如下,每页查询10条,查询多页,可能会有重复数据返回,此时查询要sort排序字段,尽可能唯一,创建时间或者主键、唯一ID字段等。...一个常见原因就是ES_score评分引起。ES默认排序,恰恰就是按 _score倒序。...三、from-size分页设置窗口大小 如果初次使用且对es不熟悉的话,当from + size分页查询超过10000候,会报如下异常: Result window is too large, from

75810

高级查询(化繁为简、分页提升性能)

扩展查询以数据表索引为依据来生成: 唯一索引(含主键)生成FindByAbc方法(FindByName),返回单个对象; 非唯一索引生成FindAllByAbc方法(FindAllByClassID...高级分页 两个例子都出现了一个PageParameter参数page,这是分页参数,包含分页查询以及排序所需要数据。 ?...PageIndex和PageSize指定页序号和每页大小,这是内部建立分页查询核心依据; Sort 指定排序字段,Desc 指定是否降序(默认升序); RetrieveTotalCount 指定是否或者总记录数...,早期版本还要求有主键字段; 因此,sql 必须是简单单表查询语句,PageSplit 才能把任意查询拆开并转换为分页查询。...XCode要求数据查询必须考虑分页,没有分页系统一般死在100万行以内。 Field扩展 内嵌类_引用字段是Field,它继承自FieldItem。

1.2K20
领券