数据库常问知识点

192 阅读2分钟

索引

1. 什么是索引?

可以提高查询效率的一种排好序的数据结构

2. 索引分类

2.1 聚集索引--索引和数据不放在一起,如InnoDB使用的就是聚集索引
2.2 主键索引--主键索引自带非空唯一约束
2.2.1 为什么要使用整型自增主键?-- 如果不自增,插入某个中位数据时,需要调整B+树

3. 索引底层的数据结构

3.0 为什么不用HASH表?-- hash只有在一条数据时查询效率高
3.1 为什么不用二叉搜索树?--二叉搜索树在极端情况下退化成链表
3.2 为什么不用平衡二叉树或者红黑树? -- 二叉树的高度还是太高
3.3 为什么不用B树? -- 在范围查询时,B树中序遍历需要跨层访问,磁盘IO代价高 3.4 为什么用B+树?查询效率+磁盘读写代价低(所有数据都在叶子节点上,且为链表相连)

4. 其他

4.1 以下情况会使用索引吗?

SELECT * FROM t1 where ud_name LIKE%ju'
#(字段都是索引时)会使用索引,like不影响select索引的情况
SELECT * FROM t1 WHERE ud_name LIKE '%ju'
#(增加非索引列)不会使用索引,包含非索引的字段时

4.2 锁

  • 行级锁的优点:
    减少锁冲突、可以长时间锁定单行、回滚时只有少量更改
  • 行级锁的缺点: 比表级锁更占内存、在表的大部分行中使用时,比页级或表级锁定速度慢

区别性问题

  • truncate 和 delete的区别
不同truncatedelete
类型DDL语句DML语句
删除后再插入从1开始从断点开始
添加筛选条件不能
效率
返回值影响的行数
回滚不能
  • DDL\DML\DCL区别
不同DMLDDLDCL
概念ManipulationDefinationControl
操作对象数据记录库表权限
  • INSERT INTO 表(字段1,字段2) VALUES (值1,值2)和
    INSERT INTO 表 SET 字段1=值1,字段2=值2...
    区别: 第一种可插入多条数据,VALUES(,,),(,,)...

设计

1 E-R图 (概念模型)

1.1 图示

MVCC

(Multi-Version Concurrency Control)多版本并发控制
好处:读不加锁,读写不冲突 两类读操作:

  • 快照读:可能是历史版本(不加锁

  • 当前读:最新版本(加锁)