一、索引
1、索引简介
- 什么是索引?
加速查询
- 为什么要有索引?
索引在 MySQL 中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。
索引优化应该是对查询性能优化最有效的手段了。善用索引能够轻易将查询性能提高好几个数量级。
- 索引的优劣势:
索引的优势:效率高 查询速度快
索引的劣势:内存量增加
2、MySQL 中索引的使用
- 创建索引
- 创建表时创建
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX myindex (username(16))
);
语法解析:代码中的 index 表示索引,myindex 表示定义的索引名称。
- 创建表之后创建
CREATE INDEX myindex ON mytable(username(16));
或者
ALTER table mytable ADD INDEX myindex(username)
- 查看索引
SHOW INDEX FROM mytable
- 删除索引
DROP INDEX myindex ON mytable;
或者
ALTER TABLE mytable DROP INDEX myindex;
语法分析:代码中的 myindex 是创建索引时定义的索引名称。
4)通过 EXPLAIN 分析 SQL 是否使用到索引
explain select * from mytable where username = 'jack'
3、索引的使用规则
- 索引分类
常见的索引类型有:主键索引、唯一索引、普通索引、全文索引、组合索引。
-
主键索引:即主索引,根据主键 pk_clolum(length)建立索引,不允许重复,不允许空值;
-
唯一索引:用来建立索引的列的值必须是唯一的,允许空值;
-
普通索引:用表中的普通列构建的索引,没有任何限制… …
- 适合建立索引的情况
-
主键自动建立唯一索引;
-
经常作为查询条件在 WHERE 或者 ORDER BY 语句中出现的列要建立索引;
-
作为排序的列要建立索引…
- 不适合建立索引的情况
-
经常增删改的列不要建立索引;
-
有大量重复的列不建立索引;
-
表记录太少不要建立索引。
**具体查看索引是否有效,可以使用 explain 命令查询。
二、事务
1、事务简介
- 什么是事务?
-
事务(Transaction):一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务
-
(例如银行账户转 账业务,该业务就是一个最小的工作单元)。
-
事务只和 DML 语句有关,或者说 DML 语句才有事务。
*在一个转账业务中,以上两条 DML 语句必须同时成功或者同时失败。
2)事务有什么用?
可以保证数据的一致性和完整性(避免异常和错误等导致的数据信息异常)
2、MySQL 中事务的使用
在 mysql 中,事务的常规操作包括:开启事务、提交事务与回滚事务。
- 开启事务
start transaction;
或者
begin transaction;
- 提交事务
commit;
- 回滚事务
rollback;
-
手动开启事务,向 t_act 表中插入一行记录,提交事务。
start transaction;-- 手动开启事务 insert into t_act values(3,300); -- 更新操作 commit;-- 提交事务,commit 之后即改变底层数据库数据 select * from t_act;
-
手动开启事务,向 t_act 表中插入一行记录,回滚事务。
start transaction;-- 手动开启事务 insert into t_act values(4,200); -- 更新操作 rollback;-- 回滚事务 select * from t_act;
3、事务的特征
- 原子性(A):事务是最小单位,不可再分;
- 一致性©:事务要求所有的 DML 语句操作的时候,必须保证同时成功或者同时失败;
- 隔离性(I):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰;
- 持久性(D):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)。
4、事务的隔离级别
-
读未提交(read uncommitted)
-
读已提交(read committed)
-
可重复读(repeatable read)
-
串行化(serializable)
事务隔离级别与一致性的关系也可以用下表表示:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | √ | √ | √ |
读已提交 | × | √ | √ |
可重复读 | × | × | √ |
串行化 | × | × | × |
*总结:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊。
三、锁
锁是计算机协调多个进程或线程并发访问某一资源的机制。