首页 > 数据库 >常见的sql面试题

常见的sql面试题

时间:2024-07-04 09:02:18浏览次数:3  
标签:面试题 范式 常见 使用 事务 查询 索引 sql 主键

1.sql优化

(1)避免使用*

(2)合理创建索引

(3)尽量避免where子句中对字段进行null值判断,否则全表扫描。

(4)尽量避免在where子句中使用or来连接条件,也会进行全表扫描。用IN替换OR

(5)like时,不以%开头,否则全表扫描

(6)尽量避免在where子句中对字段进行表达式操作,否则全表扫描

(7)尽量避免在where子句中对字段进行函数操作,否则全表扫描

(8)复合索引,要遵循最左原则(只要最左边的在where中出现即可)

(9)左右外连接要遵循小表驱动大表

(10)尽量避免使用子查询。MySql的优化器对子查询的处理能力比较弱,可以改写成Inner Join,因为 Inner Join MySQL不需要在内存中创建临时表。

(11)大分页优化:如果数据量巨大,造成分页过多,导致越往后面翻页,SQL的耗时越长。可以先使用ID>上一页的最大ID进行查询,再使用LIMIT pageSize来优化。

select * from order limit 99,980,20. -- 优化前

select * from order id>99,980 limit 20 -- 优化后

(12)在使用group by的时候,尽量使用where替换having,having只会在检索出所有记录之后才会对结果集进行过滤,这个处理需要排序分组,如果能通过where子句提前过滤查询的数目,就可以减少这方面的开销。

2 如何判断是否用到索引

使用EXPLAIN

3 常见的索引有哪些

主键索引、唯一索引、普通索引、复合索引

4 最左匹配(常见)和其原理(不常见)

概念:最左匹配就是只有包含索引键左边的查询才会走联合索引。

原理:mysql会对索引进行排序,联合索引也是。比如联合索引a,b;会先对a进行排序,如果a相等,再对b进行排序,如a=1 and b=2,此时a值确定b时相对有序的,所以会用到索引。如果a出现了排序(也就是遇到了范围查询如a>1 and b=2),则无法保证b的顺序(1,3、2,1),此时a字段可以匹配上索引,剩下的字段索引就失效了。

5 EXPLAIN的作用

explain可以分析sql性能的好坏和是否用到了索引。根据type字段的值,判断性能的好坏,最好到ref级别,至少达到range级别。

6 创建索引的原则

在经常需要搜索、排序、分组或联合操作的列上创建索引。

对于具有唯一性特征的列,如学号、身份证号等,创建唯一性索引可以快速定位到特定记录。

限制索引数目:过多的索引会占用额外的磁盘空间,并可能降低更新操作的速度。

尽量使用数量少的索引:如果索引的值很长,则占用的磁盘较大,查询速度会受到影响。

更新频繁的字段不适合创建索引,会导致索引树频繁的去维护其结构,从而导致性能下降。

7 一级索引和二级索引的区别

mysql的索引时B+树结构,其中一级索引又叫聚簇索引,其中非叶子节点存储的是索引,最底层的叶子节点存储的是索引和数据。

二级索引也叫做非聚簇索引,非主键索引的叶子节点包含的是主键的值而不是数据记录的地址。因此,使用非主键索引查询时需要先找到主键的值,然后再通过主键的值来查询数据记录,这个动作叫做回表。

8 常见的聚合函数和分页公式

SUM MAX MIN AVG COUNT GROUP_CONCAT()

分页公式

SELECT * FROM table_name LIMIT offset, row_count;

9 索引的作用?为什么?

作用:提高查询性能。

原因:索引的使用会减少IO次数,从而提高查询性能。如果不使用索引,会导致全表扫描,从而使性能下降。

10 索引失效的场景

组合索引没有遵循最左匹配。

模糊查询中%在左侧。

在索引的列上使用表达式。

在索引的列上使用函数。

在查询条件中使用IS NULL或者IS NOT NULL会导致索引失效。

在查询条件中使用OR连接多个条件会导致索引失效,除非OR连接的每个条件都加上索引。

11 金额用什么数据类型

一般使用分的话,mysql使用bigint,java使用Long。

使用元可以使用decimal,java使用BigDecimal.

12 int(n)n是什么

显示宽度

13 什么是回表

非主键索引的叶子节点包含的是主键的值而不是数据记录的地址。因此,使用非主键索引查询时需要先找到主键的值,然后再通过主键的值来查询数据记录,这个动作叫做回表。

14 数据库事务四大特性?隔离等级

数据库事务的四大特性通常简称为ACID特性,它们确保了数据库操作的可靠性和一致性。隔离等级定义了多个事务同时执行时,事务之间的隔离程度。以下是详细的解释:

ACID特性

  1. 原子性 (Atomicity)

    • 原子性确保事务中的所有操作要么全部成功,要么全部失败。即事务是一个不可分割的工作单元。

    • 如果事务在执行过程中出现错误,所有已执行的操作必须回滚(撤销),数据库回到事务开始前的状态。

  2. 一致性 (Consistency)

    • 一致性确保事务执行前后,数据库从一个一致的状态转换到另一个一致的状态。

    • 所有事务都必须使数据库从一个一致状态变到另一个一致状态,同时遵守所有的业务规则、数据完整性约束、触发器等。

  3. 隔离性 (Isolation)

    • 隔离性确保并发事务执行时,一个事务的中间状态对其他事务是不可见的。

    • 事务之间的隔离可以通过不同的隔离级别来实现,防止因并发操作导致数据不一致。

  4. 持久性 (Durability)

    • 持久性确保一旦事务提交,其所做的修改就会永久保存到数据库中。

    • 即使系统发生崩溃,也能通过数据库日志或其他恢复机制恢复提交后的数据。

隔离等级

SQL标准定义了四种事务隔离级别,从低到高依次为:

  1. 未提交读 (Read Uncommitted)

  2. 提交读 (Read Committed)

  3. 可重复读 (Repeatable Read)

  4. 序列化 (Serializable)

隔离等级

  1. 未提交读 (Read Uncommitted)

  2. 提交读 (Read Committed)

  3. 可重复读 (Repeatable Read)

  4. 序列化 (Serializable)

15 三大范式和反范式

第一范式 (1NF)

第一范式要求所有字段都是原子的,即字段不可再分。每个字段的值都是唯一且不可再分割的基本数据项。

第二范式 (2NF)

在满足第一范式的基础上,第二范式要求每个非主键列都必须完全依赖于主键,而不能只依赖于主键的一部分。

第三范式 (3NF)

在满足第二范式的基础上,第三范式要求每个非主键列都直接依赖于主键,而不是依赖于其他非主键列。

反范式

反范式是指在特定情况下,为了提高查询效率或者简化查询逻辑,故意违反某些范式规范。通常在需要进行大量查询且对性能要求较高的系统中使用反范式。

16 如何一次添加50万条数据

如果一次性添加50万条数据会导致mysql压力过大,从而有宕机的风险。可以采用分批添加的方案,比如使用定时任务,一次添加5000条数据。

17 常见的存储引擎

最常见的有InnoDB和MyISAM。

区别:

数据存储结构:

MyISAM的数据存储文件有三个:.frm(表结构定义)、.MYD(数据文件)、.MYI(索引文件)。

InnoDB数据存储文件有两个:.frm(表结构定义)和.ibd(数据和索引文件)。

事务支持:

MyISAM不支持事务,InnoDB支持事务处理。

锁机制

MyISAM使用表级锁,InnoDB即支持行级锁(默认),也支持表锁。

外键支持

MyISAM不支持外键约束,InnoDB支持外键约束。

全文索引支持

MyISAM支持,InnoDB不支持。

标签:面试题,范式,常见,使用,事务,查询,索引,sql,主键
From: https://blog.csdn.net/2301_80520473/article/details/140169299

相关文章

  • 搭建论坛和mysql数据库安装和php安装
    目录概念步骤安装mysql8.0.30安装php安装Discuz概念搭建论坛的架构:lnmp+DISCUZ l表示linux操作系统n表示nginx前端页面的web服务m表示mysql数据库用来保存用户和密码以及论坛的相关内容p表示php动态请求转发的中间件步骤(已经提前安装了nginx)1.关闭......
  • MySQL网络安全&容灾备份
    网络安全主要三个方面。一般云厂商都提供网络相关的安全:白名单、私有网络、SSL加密等。 网络:  MySQL服务器与客户端连接安全SSL(TLS)加密传输。  账户使用较弱的密码或不使用密码,账号安全。valited_password。  账号权限,最小化原则。  网络访问控制,云厂商使用白名单......
  • 【信息系统项目管理师】常见图表
    作文里面的画图题用语言描述画图过程合同采购综合评分标准责任分配矩阵成本预算表成本估算成本管理计划活动清单活动属性变更日志问题日志项目章程自己再添加更多内容甘特图甘特图包含以下三个含义:1、以图形或表格的形式显示活动;2、通用的显示进......
  • MySQL-表级锁(表锁、元数据锁、意向锁)
    文章目录1、表级锁介绍1.1、对于表级锁,主要分为以下三类:2、表锁2.1、对于表锁,分为两类:2.2、共享读锁2.2.1、创建表score2.3、独占写锁3、元数据锁3.1、查看数据库中的元数据锁的情况4、意向锁4.1、假如没有意向锁4.2、有了意向锁之后4.3、查看意向锁及行锁的加锁情......
  • MySQL-16.MVCC(多版本并发控制)
    C-16.多版本并发控制1.什么是MVCCMVCC(MultiversionConcurrencyControl),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更新的行,并且......
  • IIS(Internet Information Services)是Windows操作系统中的一种Web服务器软件。以下是一
    IIS(InternetInformationServices)是Windows操作系统中的一种Web服务器软件。以下是一些常见的与IIS相关的命令和工具:IISRESET:作用:重启IIS服务。语法:iisreset[/noforce][/restart][/stop][/start][/status][/reboot][/help]APPCMD:作用:用于配置IIS7.x及以上版......
  • Cesium常见设置视角所用到函数
     1.左键拾取经纬度坐标consthandler=newCesium.ScreenSpaceEventHandler(viewer.canvas)//监听鼠标点击事件handler.setInputAction(function(click){//使用pick函数获取点击位置的实际位置varcartesian=viewer.scene.pickPositi......
  • SQL查找在职员工自入职以来的薪水涨幅情况
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述有一个员工表employees简况如下:有一个薪水表salaries简况如下:......
  • SQL 查找所有员工的last_name和first_name以及对应的dept_name
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述有一个员工表employees简况如下:有一个部门表departments表简况如......
  • SQL获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。描述有一个员工表employees简况如下:有一个薪水表salaries简况如下:......