数据库
SQL优化
- 在表中建立索引,优先考虑WHERE,GROUP BY使用到的字段
- 尽量避免使用SELECT*,而是采用具体的字段
- 尽量避免使用IN、NOT IN、OR,会导致数据库引擎放弃索引而进行全表扫描
- 尽量避免在字段开头进行模糊查询
- 尽量避免进行NULL值判断
- 尽量避免在WHERE条件中等号的左侧进行函数操作
SQL注入
事务
事务相关的两个关键字
**提交事务commit:**标志事务全部成功的结束。
清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。
**回滚事务rollback:**标志事务全部失败的结束。(只能回滚到上一次的提交点)
撤销事务性活动的日志文件以及所有DML操作
存储引擎 MyISAM innoDB区别
5.7版本与大版本区别
事务ACID特性
事务是逻辑上的一组操作同时执行或者不执行。比如A给B一百块钱,这背后的逻辑就是A的余额少了一百块,B的余额多了一百块,两个操作如果没有同时进行,那么就出事了。
A原子性:事务是最小的工作单元。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。
C一致性:在同一个事务当中,所有操作必须同时成功,不会结束在中间某个环节。
I隔离性:操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
D持久性:事务提交,即把“没有保存到硬盘上的数据”保存到硬盘上
事务隔离级别
读取未提交:最低隔离级别,允许读取尚未提交的数据,存在脏读、不可重复读、幻影读
读取已提交:允许读取已经提交的数据,存在不可重复读、幻影读
可重复读:对同一字段的多次读取结果都一致,除非数据是事务本身所修改的,存在幻影读
可串行化:最高隔离级别,完全符合ACID特性,
索引
索引定义,优缺点
索引是在字段上添加的,负责缩小扫描范围,提高查询效率。主键上、unique字段上都会自动添加索引。当数据量庞大,经常出现在where后面,很少进行增删改操作的时候就可以添加索引。
优点是加快数据的检索效率,加速表与表的连接
缺点是索引需要占用物理空间
索引分类
单一索引,复合索引,主键索引(主键上),唯一性索引(具有unique约束)
索引操作
创建索引
CREATE INDEX emp_ename_index ON emp(sal); 在emp表的sal字段上创建名为emp_ename_index索引
删除索引
DROP INDEX emp_ename_index ON emp;
索引失效的情况
模糊匹配以%开头,使用or,复合索引使用右侧的列,where中索引列参与运算或使用函数。
索引使用的数据结构
MySQL索引使⽤的数据结构主要有BTree索引 和 哈希索引