1. 第一类丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。
2. 脏读:一个事务读到另一个事务未提交的更新数据。
3. 幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。
4. 不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样。
5. 第二类丢失更新:这是不可重复读 中的特例,一个事务覆盖另一个事务已提交的更新数据。
隔离级别 | 脏读(Dirty Read) | 不可重读(Unrepeatable read) | 幻读(Phantom Read) |
读操作未提交(Read Uncommitted) | 可能 | 可能 | 可能 |
读操作已提交(Read Committed) | 不可能 | 可能 | 可能 |
可重读(Repeatable Read) | 不可能 | 不可能 | 可能 |
可串行化(Serializable) | 不可能 | 不可能 | 不可能 |
1. 为查询缓存优化你的查询
2. EXPLAIN你的 SELECT 查询
3. 当只要一行数据时使用 LIMIT 1
4. 为搜索字段建索引
5. 在Join表的时候使用相当类型的例,并将其索引
6. 避免 SELECT *
7. 用join代替子查询
8. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
ALTER TABLE <表名> ADD INDEX (<字段>);
5. 实践中如何优化MySQL
我当时是按以下四条依次回答的,他们四条从效果上第一条影响最大,后面越来越小。
① SQL语句及索引的优化 单列索引(主键索引,唯索引,普通索引)和组合索引
② 数据库表结构的优化
③ 系统配置的优化
④ 硬件的优化
6. 什么情况下设置了索引但无法使用
① 以“%”开头的LIKE语句,模糊匹配
② OR语句前后没有同时使用索引
③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)
8. 索引的底层实现原理和优化
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE`table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引) mysql>ALTERTABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引) mysql>ALTERTABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引) mysql>ALTERTABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引 mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`,`column2`, `column3` )
Linux: 动态进程 top –p 123 树形进程pstree 端口 netstat -apn | grep 80 终结进程 kill-9 123