java面试题之MySql(1)

java面试题之MySql(1)

一、描述主键、外键、候选主键、超键是什么

  • 主 键:用户选作元组标识的一个程序主键
  • 外 键:在一个表中存在的另一个表的主键称此表的外键。
  • 候选键:是最小超键,即没有冗余元素的超键。
  • 超 键:在关系中能唯一标识元组的属性集称为关系模式的超键

二、数据库设计的三大范式

  • 第一范式:每个列都不可以再拆分
  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖与主键的一部分
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键

三、drop,delete与truncate的区别

  • truncate和delete只删除数据不删除表的结构(定义),drop语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index)
  • delete 语句是数据库操作语言(dml),事务提交之后才生效;truncate、drop 是数据库定义语言(ddl),操作立即生效。
  • delete 语句不影响表所占用的extent,高水线(high watermark)保持原位置不动;显然drop语句将表所占用的空间全部释放; truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reusestorage;truncate 会将高水线复位(回到最开始)。
  • 速度:一般来说: drop> truncate > delete
  • 安全性:小心使用 drop 和 truncate,尤其没有备份的时候.,否则哭都来不及。
  • 使用上:想删除部分数据行用delete,注意带上where子句. 回滚段要足够大。想删除表,当然用drop。想保留表而将所有数据删除,如果和事务无关,用truncate即可; 如果是整理表内部的碎片,可以用truncate跟上reuse stroage,再重新导入/插入数据。

四、SQL UNION 和 UNION ALL 区别

  • Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序。
  • Union All:对两个结果集进行并集操作,包括重复行,不进行排序。

五、exists、in、any、all区别

  • 使用exists的时候,不在对子查询的结果进行缓存,子查询的返回的结果并不重要。
  • 使用in的时候,会把子句中的查询作为结果缓存下来,然后对主查询中的每个记录进行查询。
  • any:表示满足一个条件即可
  • all:要满足子查询中所有的情况

6.sql语句的执行顺序

  • from
  • where
  • group by
  • having
  • select
  • order by
  • limit

七、count(*)和count(1)和count(id)区别

  • count(*)和count(1)其实并没有区别,这两者都会将表中所有行都算进来,也就是该表的总行数

  • count(**):扫描全表,但是不取值,按行累加。

  • count(1):扫描全表,但不取值,server层收到的每一行都是1,判断不可能是null,按值累加。

  • count(id):如果该列的值为null时,改行不计入count总数中,否则总数累计+1

  • 性能速度:count(主键 id) < count(1) ≈ count(*)


八、SQL语句优化(不少于6条)

一.常规SQL语句优化

  • 用TRUNCATE 代替DELETE
  • 在确保完整性的情况下,多使用COMMIT语句。
  • 尽量减少表的查询次数。

二.表连接优化

1.驱动表的选择:

  • 驱动表是指被最先访问的表

2.where子句连接顺序

  • 表连接最好都在where条件以前有。

三、尽量避免在字段开头模糊查询,会导致数据库引擎放弃索引进行全表扫描

四、尽量避免使用 or,会导致数据库引擎放弃索引进行全表扫描


十、SQL常用函数有哪些?

  • AVG(col)返回指定列的平均值
  • COUNT(col)返回指
  • MIN(col)返回指定列的最小值
  • MAX(col)返回指定列的最大值
  • SUM(col)返回指定列的所有值之和
  • GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果

十、左连接 右连接 内连接的区别

  • left join (左连接,左外连接):返回包括左表中的所有记录和右表中连接字段相等的记录。
  • right join (右连接,右外连接):返回包括右表中的所有记录和左表中连接字段相等的记录。
  • inner join (等值连接或者叫内连接):只返回两个表中连接字段相等的行。

十一、Mysql三种常见引擎的区别

特性InnoDBMyISAMMEMORY
事物安全支持不支持不支持
对外建的支持支持不支持不支持
存储限制64TB
空间使用
内存使用
插入数据的速度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的优化可以从多个方面入手。首先,可以通过优化查询来提高MySQL的性能。这包括使用合适的索引、避免全表扫描、优化查询语句等。其次,可以通过调整MySQL的配置参数来提升性能,例如增加缓冲区大小、调整并发连接数等。此外,还可以考虑使用缓存技术,如使用Redis作为缓存层,减少对数据库的访问。另外,对于大数据量的表,可以考虑分库分表的方式来提高查询效率。总之,MySQL的优化是一个综合性的工作,需要根据具体的场景和需求进行调整和优化。 参考资料: \[1\] 【Java面试总结】MySQL篇·SQL优化篇 \[2\] MySQL 精选 60 道面试题(含答案) \[3\] MySQL如何保证ACID #### 引用[.reference_title] - *1* [【Java面试总结】MySQL篇·优化篇](https://blog.csdn.net/Gherbirthday0916/article/details/129097938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Java面试题mysql面试题](https://blog.csdn.net/qq_40036754/article/details/126608721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值