java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)

上一篇:https://blog.****.net/qq_41901915/article/details/104972555

 

1.高性能的索引策略之聚簇索引(主键索引)?

聚簇索引不仅是一种索引类型,也是一种数据存储方式。

叶子页包含了行的全部数据,但节点页只包含了索引列。

简单的来说就是通过主键来聚集数据,innodb就是这么做的,如果你没有设置,它会选择一种隐示主键的方式。

优点:

数据访问快,可以把相关数据放到一起。比如:通过一个主键,我就可以获得这个人的所有邮件。

2.高性能的索引策略之覆盖索引?

参考:https://www.cnblogs.com/happyflyingpig/p/7662881.html

参考:https://blog.****.net/qq_15037231/article/details/87891683

简单的来说就是,只从索引中就可以获得查询的数据,不必从数据表中来读取。创建的索引覆盖了查询语句中的字段和条件,查询速度快,还可以进行排序。

explain的解释中的extra会出现using index。

3.什么是最左前缀原则?

最左前缀:顾名思义,就是最左优先,比如我们创建了abc联合索引,相当于创建了a,ab,abc索引

注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

4. 高性能的索引策略之使用索引扫描来做排序?

explain出来的type为index,那么就是索引排序。

有三种情况可以用索引扫描来做排序:

(1)索引的列顺序和order by的列顺序完全一样,切排序方向一样才可以。

(2)满足索引的最左前缀原则才可以。

(3)前导列为常量的时候,后面也符合一定的顺序才可以。

例子:

java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)

5.高性能的索引策略之避免重复索引和冗余索引?

重复索引:

java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)

冗余索引:

如果创建了联合索引(A,B),就相当于创建了(A),(A,B)如果再创建一个(A),那么它就是冗余索引。

6.高性能的索引策略之避免未使用的索引?

没有使用的,当然是多余的,那么就可以删掉了。

7.查询优化之是否向服务器发送了不需要的数据?

谨慎使用select *,因为很可能查询了没有用的数据。

重复查询相同数据,如果一个用户进行评论,会查询这个用户的id,如果多次评论,查询的id就都是一样的了,所以就可以用缓存了。

由于客户端和服务器之间是半双工通信,只能有一方可以发送,如果这个人想着查询所有,然后在客户端这边进行筛选,这将会是极大的浪费,可以在客户端这边直接加上limit,限制发送的数据量。

8. 查询优化之切分查询?

java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)

这样可以将服务器的压力分散到一个很长的时间段上。

9. 查询优化之分解关联查询?

java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)

10.查询优化之查询的过程?

java面经查缺补漏之二十九天(数据库索引还没啃完,继续学习,然后再学习一些查询优化策略)