超全MySQL学习笔记

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

超全MySQL学习笔记

⽬录

MyISAM和InnoDB

性能下降SQL慢的原因:

Mysql执⾏顺序

SQLJoin

索引

索引的优劣

1.优势

2.劣势

索引分类

创建

删除

查看

mysql索引结构

那些情况建索引

哪些情况不要建索引

性能分析

能⼲什么

id三种情况

select_type

type::

Extra

索引优化

单表优化

双表优化

三表优化

索引⼝诀

索引案例

Order By 索引优化

exsites

Mysql慢查询⽇志命令

函数操作批量插⼊数据

show Profile分析sql

全局查询⽇志

Mysql锁

锁命令

表锁:读锁

表锁:写锁

⾏锁

事务

⾏锁测试

间隙锁

⾏锁总结

MyISAM和InnoDB

对⽐MyISAM InnoDB

主外键不⽀持⽀持

事务不⽀持⽀持

⾏表锁表锁,操作时即使操作⼀条记录也会锁住⼀整张表,不适合⾼并发的操作⾏锁,操作时只锁住某⼀⾏,不会影响到其他⾏,适合⾼并发

缓存只缓存索引,不缓存其他数据缓存索引和真实数据,对内存要求较⾼,⽽且内存⼤⼩对性能有影响表空间⼩⼤

关注点性能事务

默认安装Y Y

性能下降SQL慢的原因:

查询语句写的差

索引失效

关联查询太多join (设计缺陷或不得已的需求)

服务器调优及各个参数设置(缓冲,线程参数)

Mysql执⾏顺序

⼿写

机读先从from开始

SQLJoin

a表

mysql> select * from tbl_dept;

+----+----------+--------+

| id | deptName | locAdd |

+----+----------+--------+

| 1 | RD | 11 |

| 2 | HR | 12 |

| 3 | MK | 13 |

| 4 | MIS | 14 |

| 5 | FD | 15 |

+----+----------+--------+

5 rows in set (0.00 sec)

b表

+----+------+--------+

| id | name | deptId |

+----+------+--------+

| 1 | z3 | 1 |

| 2 | z4 | 1 |

| 3 | z5 | 1 |

| 4 | w5 | 2 |

| 5 | w6 | 2 |

| 6 | s7 | 3 |

| 7 | s8 | 4 |

| 8 | s9 | 51 |

+----+------+--------+

8 rows in set (0.00 sec)

mysql不⽀持全连接

使⽤以下⽅式可以实现全连接

mysql> select * from tbl_dept a right join tbl_emp b on a.id=b.deptId -> union

-> select * from tbl_dept a left join tbl_emp b on a.id=b.deptId; +------+----------+--------+------+------+--------+

| id | deptName | locAdd | id | name | deptId |

+------+----------+--------+------+------+--------+

| 1 | RD | 11 | 1 | z3 | 1 |

| 1 | RD | 11 | 2 | z4 | 1 |

| 1 | RD | 11 | 3 | z5 | 1 |

| 2 | HR | 12 | 4 | w5 | 2 |

| 2 | HR | 12 | 5 | w6 | 2 |

| 3 | MK | 13 | 6 | s7 | 3 |

| 4 | MIS | 14 | 7 | s8 | 4 |

| NULL | NULL | NULL | 8 | s9 | 51 |

| 5 | FD | 15 | NULL | NULL | NULL |

+------+----------+--------+------+------+--------+

9 rows in set (0.00 sec)

a的独有和b的独有

mysql> select * from tbl_dept a left join tbl_emp b on a.id=b.deptId where b.id is null

-> union

-> select * from tbl_dept a right join tbl_emp b on a.id=b.deptId where a.id is null;

+------+----------+--------+------+------+--------+

| id | deptName | locAdd | id | name | deptId |

+------+----------+--------+------+------+--------+

| 5 | FD | 15 | NULL | NULL | NULL |

| NULL | NULL | NULL | 8 | s9 | 51 |

+------+----------+--------+------+------+--------+

2 rows in set (0.01 sec)

索引

索引的定义:

索引是帮助SQL⾼效获取数据的数据结构,索引的本质:数据结构

可以简单的理解为:排好序的快速查找数据结构

在数据之外,数据库系统还维护着满⾜特定查找算法的数据结构,这些数据结构以某种⽅式(引⽤)指向数据,这样就可以在这些数据结构上实现⾼级查找算法。这种数据结构,就是索引,下图就是⼀种⽰例:

⼀般来说索引也很⼤,因此索引往往以索引⽂件的⽅式存储在磁盘上

我们平常所说的索引,如果没有特别指明,⼀般都是指B树(多路搜索树,不⼀定是⼆叉的)结构组织的索引,

其中聚集索引,次要索引,复合索引,前缀索引,唯⼀索引默认都是使⽤B+树索引,统称索引,当然除了B+树这种类型的索引之外,还有哈希索引。

索引的优劣

1.优势

类似⼤学图书馆图书编号建索引,提⾼了数据检索的效率,降低数据库的IO成本

通过索引对数据进⾏排序,降低数据排序的成本,降低了CPU的消耗

2.劣势

实际上索引也是⼀张表,该表保存了主键与存在索引的字段,并指向实体表的记录,所以索引列也是占⽤空间的

虽然索引⼤⼤提⾼了查询速度,但是会降低更新表的速度,⽐如 update,insert,delete操作,因为更新表时,MySQL不仅要数据也要保存索引⽂件每次更新添加了索引的字段,都会调整因为更新所带来的键值变化后的索引信息

索引只是提⾼效率的⼀个因素,在⼀个⼤数据量的表上,需要建⽴最为优秀的索引或者写优秀的查询语句,⽽不是加了索引就能提⾼效率

索引分类

单值索引

唯⼀索引

复合索引

基本语法:

创建

create [unique] index indexName on mytable(cloumnname(length));

alter mytable add [unique] index [indexName] on (columnname(length));

删除

drop index [indexName] on mytable

查看

show index from table_name\G

有四种⽅式来添加数据表的索引

相关文档
最新文档