数据库常识(一)

慢速SQL优化

  1. WHERE 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些
    可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。
  2. 用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。
  3. 避免在索引列上使用计算
  4. 避免在索引列上使用 IS NULL 和 IS NOT NULL
  5. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by
    涉及的列上建立索引。
  6. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使
    用索引而进行全表扫描
  7. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用
    索引而进行全表扫描

JDBC

JDBC的使用步骤?

  1. 注册驱动(有些新版本驱动会自动注册)
  2. 创建连接
  3. 创建Statement对象
  4. 执行SQL
  5. 处理SQL结果
  6. 关闭连接

在JDBC 编程中处理事务的步骤?

  1. 设置自动提交为false
  2. 执行事务处理SQL
  3. 如果没有异常,就提交事务
  4. 如果有异常,就回退事务
  5. 在finally中关闭连接

事务

什么是事务?

保证在一个事务中多次操作要么全都成功,要么全都失败.

事务可能发生问题?

  • 脏读:一个事务读到了另一个事务未提交的数据.
  • 不可重复读:一个事务读到了另一个事务已经提交(update)的数据。引发另一个事务,在事务中的多次查询结果不一致。
  • 虚读 /幻读:一个事务读到了另一个事务已经提交(insert)的数据。导致另一个事务,在事务中多次查询的结果不一致。

隔离级别有哪些

为了达到事务的四大特性,数据库定义了4种不同的事务隔离级别,由低到高依 次为Read uncommitted、Read committed、Repeatable read、 Serializable,这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚 未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数 据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致 的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读 仍有可能发生。
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级 别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该 级别可以防止脏读、不可重复读以及幻读。

这里需要注意的是:Mysql 默认采用的 REPEATABLE_READ隔离级别 Oracle 默认采用的 READ_COMMITTED隔离级别 事务隔离机制的实现基于锁机制和并发调度。
其中并发调度使用的是MVVC(多 版本并发控制),通过保存修改的旧版本信息来支持并发一致性读和回滚等特 性。因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是 - READ-COMMITTED(读取提交内容):,但是你要知道的是InnoDB 存储引擎默 认使用 REPEATABLE-READ(可重读)并不会有任何性能损失。 InnoDB 存储引擎在 分布式事务 的情况下一般会用到SERIALIZABLE(可串行 化)隔离级别。

事务的四大特性是什么

  1. 原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务
    中的操作要么都发生,要么都不发生。
  2. 一致性(Consistency)事务前后数据的完整性必须保持一致。
  3. 隔离性(Isolation)事务的隔离性是指多个用户并发访问数据库时,一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
  4. 持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

分库分表分片的策略有哪些?

数据切分(Sharding),简单的来说,就是通过某种特定的条件,将存放在同一
个数据库中的数据拆分存放到多个数据库(主机)中,从而达到分散单台机器负
载的情况,即分库分表。根据数据切分规则的不同,主要有两种模式,

  • 垂直切分(纵向切分),是对不同的表(或者Schema)进行切分,存储到不同的数据库(主机)之上。
  • 水平切分(横向切分),是对同一个表中的数据进行切分,存储到不同的数
    据库(主机)之上。规则是根据表中数据的逻辑关系,按照某种条件拆分。

索引

  • 索引技术原理
    MySQL索引为什么这么快

为什么使用B+树,B+树的磁盘IO次数为多少

  • 数据库在磁盘上存储数据,而磁盘IO性能相对较慢,提高数据检索性能到关键就是减少IO次数;
    B+树从根节点到叶子节点层级只有3层,每次IO可以读取一个节点到内存中,然后使用2分查找定位,使用B+树检索数据每次只需要3次IO;
    由于B+树索引IO次数非常少,是数据库广泛采用到索引技术。

主键索引和普通索引的区别

  • 主键索引:是一种特殊的唯一索引,不允许有空值。
  • 普通索引:MySQL 中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值 和空值,纯粹为了查询数据更快一点。

索引失效情况有哪些?

  • like 以%开头索引无效,当 like 以&结尾,索引有效。
  • or 语句前后没有同事使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生 效。
  • 组合索引,使用的不是第一列索引时候,索引失效,即最左匹配规则。
  • 数据类型出现隐式转换,如 varchar 不加单引号的时候可能会自动转换为 int类型,这个时候索引失效。
  • 在索引列上使用 IS NULL 或者 IS NOT NULL 时候,索引失效,因为索引是不索引空值的。
  • 在索引字段上使用,NOT、 <>、!= 、时候是不会使用索引的,对于这样的处理只会进行全表扫描。
  • 对索引字段进行计算操作,函数操作时不会使用索引。
  • 当全表扫描速度比索引速度快的时候不会使用索引。

如何判定SQL语句命中了索引

  • 分析 SQL 执行计划(explain extended),思考可能的优化点,是否命中索引等。

左外连接查询和右外关联查询的区别?

  • 外连接分为三种,分别是是左外连接(LEFT OUTER J0IN 或 LEFT JOIN 右外连接(RIGHT OUTER JOIN 或 RIC GHT JOIN、全外连接(FULL OUTER JOIN 或FULLJOIN)。

  • 左外连接:又称为左连接,这种连接方式会显示左表不符合条件的数据行,右边不符合条件的数据 行直接显示 NULL。

  • 右外连接:也被称为右连接,他与左连接相对,这种连接方式会显示右表不符合条件的数据行,左 表不符合条件的数据行直接显示 NULL。

  • 学生、课程、成绩 表格关系查询问题

数据库建表的范式是什么?

  • 第一范式:每个列都不可以再拆分。
  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
  • 第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主
    键。
  • 在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我们经常会为了性能而妥协数据库的设计。

安装过MySQL吗?MySQL里如何

实现远程连接?

授权法

  • 使用GRANT命令,添加新的用户,授予远程访问权限

改表法

  • 在localhost登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host"项,将"localhost"改称”%"
  • MySQL里的八小时末处理的机制了解吗?

使用过哪些数据连接池?数据库连接池有什么用?

  • Druid数据库
  • HikariCP
  • 是维护的数据库连接的缓存,以便在将来需要对数据库发出请求时可以重用连接。 连接池用于提高在数据库上执行命令的性能。 保护数据库连接总数,避免连接过载。

数据库中常见的聚合函数?

  • sum(), count(), avg(), min(), max()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

有分享欲的小莫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值