数据库相关知识整理
1、数据库索引
索引是对数据库表中一个或者多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中的数据。
2、事务的特性
事务简单来说:一个Session中所进行所有的操作,要么同时成功,要么同时失败。
作为单个逻辑工作单位执行的一系列操作,满足四大特性
①、原子性:事务作为一个整体被执行,要么全部执行,要么全部不执行
②、一致性:保证数据库状态从一个一致状态转为另一个一致状态
③、隔离性:多个事务并发执行时,一个事务的执行不应该影响其他事务的执行
④、持久性:一个事务一旦提交,对数据库的修改应该永久保存
3、事务的隔离级别
隔离级别决定一个session中的事务可能对另一个session中的事务的影响。ANSI标准定义了4个隔离级别,MySql的InnoDB都支持,分别是:
①、读未提交(READ UNCOMMITTED):最低级别的隔离,运行一个事务读取另外一个事务还未提交的数据,这样可能性能提高,但是会导致脏读
②、读已提交(READ COMMITTED):在一个事务中只允许对其他事务已经提交的记录可见,该隔离级别不能避免不可重复读问题
③、可重复读(REPEATABLE READ):在一个事务开始后,其他事务对数据库的修改在本事务中不可见,知道本事务提交或者回滚。但是,其他事务的插入/删除操作是对该事务是可见的,也就是说,该隔离级别并不能避免幻象读问题。在一个事务中重复查询的结果一样,除非本身事务中更新数据库
④、序列化(SERIALIZABLE):最高级别的隔离,至允许事务串行执行
4、MySql的隔离级别及事务支持
MySql的默认隔离级别是可重复读
MySql的事务支持不是绑定在MySql服务器本身,而是与存储引擎相关:
MyISAM引擎:不支持事务,用于只读程序提高性能
InnoDB引擎:MySql5.5后的默认引擎,支持ACID事务,行级锁、并发
Berkeley DB引擎:支持事务
5、drop、delete、truncate的区别
drop直接删除表;delete删除表中数据,可带where字句;truncate清空表中数据,再插入时自增id又从1开始
6、SQL语句优化策略
①、优化insert语句,一次插入多值;
②、避免在where子句中使用!=或者<>操作符,否则会放弃使用索引进行全表扫描
③、避免在where子句中对字段进行null值判断,否则会放弃使用索引进行全表扫描
④、优化嵌套查询,子查询可以用join代替
⑤、使用exists代替in
⑥、避免使用类似select * from查询
⑦、避免以%开头的like模糊匹配
⑧、避免数据类型隐式转化,如varchar不加单引号会自动转化为int型
⑨、联合索引,需要满足最左匹配原则,如联合索引col1,col2,col3,则索引生效的情况包括col1,col和col2,col1和col2和col3,类似col2和col3这种则索引失效。