SQL-基本学习II-数据库引擎与索引


这是SQL的第二篇,结合一些被面试的内容,对常考的数据库问题进行一些总结。

SQL语法编写

重复数据的一组查询
有一张person表,其中有p_id,p_name;一张house表,其中有h_id,address;一张hire表,其中有hh_id、h_id、p_id;hire记录了租房者租房的记录,一个租房客可以租多个房子。设计一条sql,查询租了多个房子的租房者姓名。

select p_name,count(*)
from hire
INNER JOIN person on hire.p_id = person.p_id
group by hire.p_id having count(*)>1;

假设京东商品表jd_sku中,price字段表示价格,promote_price字段表示促销时期的价格。请用一条SQL语句实现;当前月份为6月份时,使用promote_price字段代替price字段

update jd_sku set promote_price = price
from jd_sku
where month = '6';

Mysql的数据引擎Innodb与Myisam的区别

事务支持、行锁与表锁、聚集索引与非聚集索引、全文索引

  • 1.组成部分:Myisam的索引和数据是分开的,并且索引是有压缩的,而Innodb是索引和数据放在一起,且没有使用压缩,因而Innodb比MyISAM体积更大。MyISAM每张表都包括三种文件:表定义文件(.frm)、数据文件(.myd)和索引文件(.myi),而Innodb通常许多表保存在同一个文件中。
  • 2.Myisam没事务而Innodb支持事务,支持事务的回滚。
  • 3.MySQL表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。
    对MyISAM表进行读操作时,它不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作;而对MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作。
    InnoDB行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表锁!行级锁在每次获取锁和释放锁的操作需要消耗比表锁更多的资源。
    表级锁,直接锁定整张表,在你锁定期间,其它进程无法对该表进行写操作。如果你是写锁,则其它进程则读也不允许
    行级锁, 仅对指定的记录进行加锁,这样其它进程还是可以对同一个表中的其它记录进行操作。
  • 4.Myisam是非聚集索引,有专用的索引表而Innodb是聚集索引,根据物理存储而建立的索引。
  • 5.Myisam支持全文索引而Innodb不支持全文索引。倒排文档技术:建立一个词出现的频率和位置的库。

关于索引

索引的优点

  • 1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  • 2.可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
  • 3.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

索引的缺点

  • 1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
  • 2.索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
  • 3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

索引的实现原理 B树与B+树

在了解B树与B+树之前,先来解释一下平衡二叉树:
平衡二叉树特点

  • 非叶子节点最多拥有两个子节点。
  • 非叶子节点值大于左边子节点、小于右边子节点。
  • 树的左右两边的层级数相差不会大于1。
  • 没有值相等重复的节点。

平衡二叉树-v2-11e39093993f673de576f57ea614d604_hd

B树:平衡多路查找树
将平衡二叉树变成多路,进而减少了树的层级,提升了数据查找的效率。
B树-v2-22c2264cc1c6c603dfeca4f84a2575901_hd
B+树
应用:操作系统索引和数据库索引

1.由于内部节点不存储键值关联的附属数据,所以内部节点节省的空间可以存放更多的键值。也就意味着从磁盘存取一页时可获得更多的键值信息。
2.叶节点形成了一个链,所以对树的全扫描就是对所有叶节点的线性遍历。
特点:

  • 非叶子结点的子树指针与关键字个数相同。
  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树。
  • 为所有叶子结点增加一个链指针。
  • 所有关键字都在叶子结点出现。

B+树-v2-33826dac98d666a26b0ffee8cb2ea15a91_r.

猜你喜欢

转载自blog.csdn.net/BigBrick/article/details/85312415
今日推荐