数据库相关内容
Posted 青春无敌美少
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库相关内容相关的知识,希望对你有一定的参考价值。
最近面试,关于数据库的一些高频问题
1.聚簇索引与非聚簇索引的区别
聚簇索引:将索引与数据放在一起,当找到索引后,也就找到对应的数据了。每张表只能建立一个聚簇索引,但是该索引可以包含多个列(一般使用的是主键等不经常更新的列)。
非聚簇索引:数据储存于索引分开,叶节点指向了对应的数据行。
2.数据库引擎
1).InnoDB引擎
支持行级锁,支持事务处理,支持外键,支持崩溃修复能力和并发控制,支持MVCC。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。
2). MYISAM引擎
和InnoDB相比,只支持表级锁,其他都不支持,插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。
3.数据库回表
我们如果直接用主键查找,用的是聚集索引,能找到全部的数据。如果我们是用非聚集索引查找,如果索引里不包含全部要查找的字段,则需要根据索引叶子节点存的主键值,再到聚集索引里查找需要的字段,这个过程也叫做回表。
1)如何避免回表
因为如果用到了回表,就需要二次查询的过程,效率肯定更慢,很简单,回表是因为要查询的字段在非聚集索引里没有,所以在满足需求的情况下,我们尽量使非聚集索引里有要查询的索引字段。
在查询时,可以尽量用聚集索引来查(也就是用主键来查询),或者根据业务需求,建好的索引,满足索引查询字段。但是实际业务中,很难建立一个索引就能满足所有查询要求,所以,正常情况,回表也没事,只要能用到索引也能大大加快查询速度。
4.having和where 的区别
having筛选字段必须在select中出现,大多数情况下和group by一起使用,对分组后的结果进行进一步筛选。
where使用在分组之前,根据条件从表中筛选出数据。
使用顺序:where group by having
eg:
select __ from table group by role having 条件
5.数据库常用语句
1).增
insert into table values( , );
2).删
delect from table where 条件;
3).查
select * from table where 条件1 group by 属性 having 条件2;
先执行where进行筛选,然后在group by ,最后having筛选。
4).改
update table set 修改属性值 where 条件;
以上是关于数据库相关内容的主要内容,如果未能解决你的问题,请参考以下文章