内连接也叫然连接,只有两个表相匹配的才能在结果集中出现。返回的结果集选取两个表中所匹配的数据,舍弃不匹配的数据。
selectfifieldlistfromtable1[inner]join
table2ontable1.column=table2.column
内连接保证两个表中的所有都满条件,外连接则不然,外连接不仅仅包含符合连接条件的,且还包括左表(左外连接),右表(右外连接),或者两个边表(全外连接)中的所有数据
selectfifieldlistfromtable1left/rightouter
jointable2ontable1.column=
table2.column
前(8.0)MySQL不持全外连接MySQL索引索引是种数据结构,于帮助我们在量数据中快速定位到我们想要查找的数据。可以加快查的速度,但是会增加容量,降低增,删,改的速度。
1.MySQL有哪种索引类型
各特点常的MySQL索引结构有B-树索引,B+树索引,Hash索引和全索引。
B-Tree索引
因为存储引擎不进全表扫描来获取数据,直接从索引的根节点开始搜索,从能加快访问数据的速度。
B-Tree对索引是顺序组织存储的,很适合查找范围数据。
适于全键值、键值范围或者键前缀查找(根据最左前缀查找)
限制:对于联合索引来说,如果不是从最左列开始查找,则法使索引;不能跳过索引中的列
B+Tree索引
是B-Tree索引的变种,现在主流的存储引擎都不单纯的B-Tree,是其变种B+Tree或者T-Tree等等
和B-Tree最主要的区别就是B+Tree的内节点不存储data,只存储key,叶节点不存储指针。
Hash索引
基于Hash表实现,只有Memory存储引擎显式持哈希索引。
适合等值查询,如=、in、=,不持范围查询。
因为不是按照索引值顺序存储的,就不能像B+Tree索引样利索引完成排序。
Hash索引在查询等值时常快。
因为Hash索引始终索引的所有列的全部内容,所以不持部分索引列的匹配查找。
如果有量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。
程序员可以在B+Tree索引的基础上创建适应Hash索引。
全索引
MyISAM和InnoDB都持全索引
有三种模式:然语模式,布尔模式和查询扩展模式
R-Tree索引
MyISAM持R-Tree索引,这个和全索引基本不问。
2.B+树索引和hash索引的区别
B+树索引适合返回查找,hash索引适合等值查询。
hash索引法利索引完成排序,但是B+树索引可以。
hash索引不持多了联合索引的最左匹配规则,但是B+树索引持。
如果有量重复键值的情况下,因为存在hash碰撞,hash索引的效率会很低。
3.B树和B+树的区别
这个题其实偏向于数据结果了,这不多讲,只说下针对数据库来说,试该怎么回答。派问题:叉树,叉搜索树,B树,B+树。遇到坑爹的试官可能让你写个B+树...
叉树
任何节点的左节点的键值都于当前节点的键值,右节点的键值都于当前节点的键值平衡叉树/AVL树当叉树常极端,变成个链表后,它就没有了叉树的相关优秀性质了。所以我们在insert节点的时候,需要不断的旋转,来使叉树平衡,最终使得其查询效率最。调整共分为四种情况:LL,RR,LR,RL。
B-树
因为数据库中部分数据都存在于磁盘,但是IO次磁盘的代价相对来说较,我们需要尽可能的减少AVL树的深度,即增加每个节点的数据量,这便是B-树的由来。
每个节点称为,也就是个磁盘块。B树相对于平衡叉树,每个节点存储了更多的键值(key)和数据(data),并且每个节点拥有更多的节点
B+树
是B-树的变形,相对于B-树来说,B+树最主要的不同之处就是其叶节点上是不存储数据的,数据全在叶节点存储。这就意味着B+树B-树更胖。
因为B+树索引的所有数据均存储在叶节点,且数据是按照顺序排列的。那么B+树使得范围查找,排序查找,分组查找以及去重查找变得异常简单。B树因为数据分散在各个节点,要实现这点是很不容易的。
4.InnoDB为什么要使B+树作为索引
这时说出B+树索引的优点即可,同时也可能会引出Hash索引和全索引,InnoDB中索引即数据,数据即索引。