索引
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的区别
| 不同 | truncate | delete |
|---|---|---|
| 类型 | DDL语句 | DML语句 |
| 删除后再插入 | 从1开始 | 从断点开始 |
| 添加筛选条件 | 不能 | 能 |
| 效率 | 高 | |
| 返回值 | 无 | 影响的行数 |
| 回滚 | 不能 | 能 |
- DDL\DML\DCL区别
| 不同 | DML | DDL | DCL |
|---|---|---|---|
| 概念 | Manipulation | Defination | Control |
| 操作对象 | 数据记录 | 库表 | 权限 |
- 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)多版本并发控制
好处:读不加锁,读写不冲突
两类读操作:
-
快照读:可能是历史版本(不加锁
-
当前读:最新版本(加锁)