简单收集了一些mysql的面试题和答案,包括以下几个内容: 联合索引; 建表优化; SQL注意事项; char和varchar区别; sql in 的最大长度; 聚集索引和非聚集索引; 唯一索引和普通索引; b+树的有序性。 MySQL是世界上最流行的关系型数据库管理系统之一,经常出现在技术面试中。以下是一些关于MySQL的面试题及相关的知识点解析: 1. **联合索引**:联合索引是指在多个列上创建的索引,如`test_col1_col2_col3`。这种索引遵循最左前缀匹配原则,意味着如果查询条件包含索引的最左边列,系统可以使用该索引。例如,`SELECT * FROM test WHERE col1=“1” AND clo2=“2” AND clo4=“4”`可以使用`(col1,col2)`部分的索引。但是,`SELECT * FROM test WHERE col2=2;`不会触发这个索引,因为没有从最左列开始。 2. **建表优化**: - 表需要主键:主键确保数据的唯一性和完整性。 - 避免外键:减少数据库间的依赖,提升性能。 - 字段尽量不设为NULL:NULL值可能影响索引效率。 - 建立联合索引:针对多列查询优化。 - 经常使用的字段加索引:加速查询。 - 避免使用NULL:减少存储空间和查询复杂性。 - 按三范式设计:减少数据冗余,提高数据一致性。 - 选择合适的数据类型:如tinyint代替smallint或int,减少存储需求。 - 避免宽表:考虑表的拆分,保持表结构简洁。 - 不推荐使用text和blob:大字段可能导致性能下降,必要时考虑单独存储。 3. **SQL注意事项**: - 避免`SELECT *`:只选择需要的列,减少数据传输。 - 使用`COUNT()`或`COUNT(1)`:统计行数,`COUNT(列)`不计NULL。 - 最左匹配原则:联合索引在`WHERE`子句中需按索引顺序使用列。 - 避免函数操作索引列:如`WHERE lower(column)=value`会导致索引失效。 4. **Char和Varchar的区别**: - Char是定长,Varchar是变长,Char适合固定长度的文本,Varchar节省空间。 - Char查询性能可能优于Varchar,因为计算偏移量更直接。 - Varchar在存储短字符串时更高效,不会浪费空间。 - Char默认填充空格,Varchar默认为NULL。 5. **SQL IN的最大长度**: - Oracle中,IN子句最多支持1000个元素,MySQL无限制,但受限于SQL语句的总长度。 6. **聚集索引和非聚集索引**: - 聚集索引:数据行和索引存储在一起,一个表只有一个聚集索引,查询时直接获取数据。 - 非聚集索引:索引单独存储,每个索引项指向数据行,查询时需要两次查找。 了解这些知识点可以帮助你在面试中表现出对MySQL的深入理解和应用能力,同时在实际工作中优化数据库性能。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助