MySQL面试题

本文介绍了MySQL中索引的建立原则,包括选择唯一性索引、为高频查询字段建立索引等内容,并提供了八条具体建议。此外,还详细解释了如何使用explain关键字查看SQL语句的执行计划。

一、本文主旨

二、面试题

2.1 索引的建立原则:

:建立索引时,我们应该尽量选择唯一性索引,对高频查询字段、以及经常需要排序、分组、联合操作的字段建立索引;索引应当尽量选择数据量小的字段,如果特殊情况需要使用到数据量大的字段,那么最好使用其前缀来索引;同时要避免索引的滥用,过多的索引会增加修改表的操作,占用更多的磁盘啊空间,并且难以保证每个索引都能有效利用,像数据量小的表使用索引更会带来负优化,最好能定期维护、删除不必要的索引;

:有以下八条:
1. 选择唯一性索引;
2. 对高频查询字段创建索引;
3. 对经常需要排序、分组、联合操作的字段建立索引(order by,group by,distinct,union);
4. 限制索引的数目(大量索引会增加修改表的操作,占用磁盘空间,并且难以保证每一个索引都能得到有效利用);
5. 尽量使用数据量小的字段作为索引;
6. 数据量小的表最好不要用索引,会造成负优化;
7. 数据量大的字段最好使用前缀来索引(前面的若干字符,如TEXT 和 BLOG 类型);
8. 删除不再使用、使用少的索引;

2.2 查看MySQL语句执行计划(explain关键字有没有使用过)

:explain关键字,能帮助我们了解SQL语句的执行计划,从生效索引、连接类型、实际采用SQL运行优化选择等角度去优化SQL;

:下表解释了explain关键字的每一个字段,她能帮我们了解SQL的执行计划,观其性,我们能对生效索引、连接类型、实际采用SQL运行优化选择等角度去优化SQL;

mysql> explain select * from student s, usr u where u.name=s.name;
+----+-------------+-------+------+---------------+------+---------+------+------+--------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                          |
+----+-------------+-------+------+---------------+------+---------+------+------+--------------------------------+
|  1 | SIMPLE      | u     | ALL  | NULL          | NULL | NULL    | NULL |    4 |                                |
|  1 | SIMPLE      | s     | ALL  | NULL          | NULL | NULL    | NULL |    9 | Using where; Using join buffer |
+----+-------------+-------+------+---------------+------+---------+------+------+--------------------------------+
2 rows in set (0.00 sec)
字段含义
id操作表的顺序,越大优先级越高,同级由上至下
select_type查询类型
table输出行所引用的表
type连接使用的类型,最差的是all全表扫描
possible_keys可以使用哪些索引有助于查询
key实际使用的索引
key_len索引长度
ref索引的那一列被使用了
rows必须检查的用来返回请求数据的行数
Extrasql语句实际运行的优化选择
### MySQL 面试题及答案整理 以下是关于 MySQL 的一些常见面试题及其解答: #### 数据库基础概念 1. **什么是数据库索引?** 索引是一种用于快速检索数据的技术,它通过创建额外的数据结构来加速查询操作。常见的索引类型有 B-Tree 和哈希表[^1]。 2. **MySQL 支持哪些存储引擎?** MySQL 常见的存储引擎包括 InnoDB 和 MyISAM。InnoDB 提供事务支持和外键约束,而 MyISAM 不支持这些功能但读取速度更快[^2]。 3. **如何优化 SQL 查询性能?** 可以通过以下方式优化查询性能: - 使用合适的索引来减少全表扫描的时间复杂度。 - 尽量避免使用 `SELECT *`,只选取必要的字段。 - 对于大数据集,考虑分页加载或分区表设计[^3]。 #### 实践应用问题 4. **解释一下 ACID 是什么?** ACID 表示原子性 (Atomicity)、一致性 (Consistency)、隔离性 (Isolation) 和持久性 (Durability),这是关系型数据库中事务处理的核心特性[^4]。 5. **如何解决死锁问题?** 死锁通常发生在两个或多个事务互相等待对方释放资源的情况下。可以通过设置超时时间或者调整事务顺序来降低发生概率[^5]。 6. **请描述主从复制的工作原理。** 主从复制是指将一个数据库服务器上的更改同步到其他服务器上的一种机制。主节点负责写入操作并将日志发送给从节点;从节点则根据接收到的日志执行相同的操作完成更新[^6]。 7. **举例说明联合查询的作用以及语法格式是什么样的?** 联合查询可以用来组合来自不同表格的结果集合。其基本形式如下所示: ```sql SELECT column_name(s) FROM table1 UNION [ALL] SELECT column_name(s) FROM table2; ``` 8. **谈谈你对视图的理解吧!** 视图是一个虚拟表,基于SQL语句构建而成,并不实际保存任何物理记录。它们能够简化复杂的查询逻辑并提供一定程度的安全保护措施[^7]。 9. **存储过程有什么优点呢?** 存储过程是一组预编译好的SQL指令序列, 它们被存放在数据库内部以便重复调用。相比普通的动态SQL而言具有更高的效率因为减少了网络传输开销同时也增强了安全性由于参数化输入降低了注入风险[^8]. --- 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mitays

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值