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特性
-
原子性 (Atomicity)
-
原子性确保事务中的所有操作要么全部成功,要么全部失败。即事务是一个不可分割的工作单元。
-
如果事务在执行过程中出现错误,所有已执行的操作必须回滚(撤销),数据库回到事务开始前的状态。
-
-
一致性 (Consistency)
-
一致性确保事务执行前后,数据库从一个一致的状态转换到另一个一致的状态。
-
所有事务都必须使数据库从一个一致状态变到另一个一致状态,同时遵守所有的业务规则、数据完整性约束、触发器等。
-
-
隔离性 (Isolation)
-
隔离性确保并发事务执行时,一个事务的中间状态对其他事务是不可见的。
-
事务之间的隔离可以通过不同的隔离级别来实现,防止因并发操作导致数据不一致。
-
-
持久性 (Durability)
-
持久性确保一旦事务提交,其所做的修改就会永久保存到数据库中。
-
即使系统发生崩溃,也能通过数据库日志或其他恢复机制恢复提交后的数据。
-
隔离等级
SQL标准定义了四种事务隔离级别,从低到高依次为:
-
未提交读 (Read Uncommitted)
-
提交读 (Read Committed)
-
可重复读 (Repeatable Read)
-
序列化 (Serializable)。
隔离等级
-
未提交读 (Read Uncommitted)
-
提交读 (Read Committed)
-
可重复读 (Repeatable Read)
-
序列化 (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