MySQL高级文章集合

开发时,把测试数据拷贝到本地数据库时,需要把sql_mode也拷贝过来,让配置都一样。

缓存:读信息用的

缓冲:写信息用的

=================================

利用show profile查看sql的执行周期:

1.修改配置文件/etc/my.cnf

   新增一行:query_cache_type=1

   重启mysql

2.show variables like '%profiling%'

   set profiling=1;

3.select * from xxx;

   show profiles;显示最近几次查询

更细致的查询是:

      show profile cpu,block io for query 2;(其中2代表id)

==================================

行锁会出现死锁

CSV引擎 可以将普通的CSV文件作为MySQL的表来处理,但不支持索引。CSV引擎可以作为一种数据交换机制,非常有用。

MySQL没有全连接,只有Oracle有

===================================================

#列出所有人员和机构的对照关系(AB全有)

  #MySQL Full Join的实现,因为MySQL不支持FULL JOIN,所以用#left join+union(可去除重复数据)+right join

  select * from t_tmp A left join t_dept B on A.deptId=B.id

  union    (union或者union all必须保证两个的字段一致还有顺序一致)

  select * from t_tmp A right join t_dept B on A.deptId=B.id

====================================================

除了主键是聚簇索引外都是非聚簇索引

====================================================

MySQL-InnoDB-MVCC多版本并发控制

  1. 一般我们认为MVCC有下面几个特点:

    • 每行数据都存在一个版本,每次数据更新时都更新该版本
    • 修改时Copy出当前版本, 然后随意修改,各个事务之间无干扰
    • 保存时比较版本号,如果成功(commit),则覆盖原记录, 失败则放弃copy(rollback)
    • 就是每行都有版本号,保存时根据版本号决定是否成功,听起来含有乐观锁的味道, 因为这看起来正是,在提交的时候才能知道到底能否提交成功
  2. 而InnoDB实现MVCC的方式是:

    • 事务以排他锁的形式修改原始数据
    • 把修改前的数据存放于undo log,通过回滚指针与主数据关联
    • 修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback)
  3. 二者最本质的区别是: 当修改数据时是否要排他锁定,如果锁定了还算不算是MVCC?
  • Innodb的实现真算不上MVCC, 因为并没有实现核心的多版本共存, undo log 中的内容只是串行化的结果, 记录了多个事务的过程, 不属于多版本共存。但理想的MVCC是难以实现的, 当事务仅修改一行记录使用理想的MVCC模式是没有问题的, 可以通过比较版本号进行回滚, 但当事务影响到多行数据时, 理想的MVCC就无能为力了。
  • 比如, 如果事务A执行理想的MVCC, 修改Row1成功, 而修改Row2失败, 此时需要回滚Row1, 但因为Row1没有被锁定, 其数据可能又被事务B所修改, 如果此时回滚Row1的内容,则会破坏事务B的修改结果,导致事务B违反ACID。 这也正是所谓的 第一类更新丢失 的情况。
  • 也正是因为InnoDB使用的MVCC中结合了排他锁, 不是纯的MVCC, 所以第一类更新丢失是不会出现了, 一般说更新丢失都是指第二类丢失更新

====================================================

一条SQL语句在MySQL中如何执行的   ※

MySQL大表优化方案

MySQL锁机制简单了解一下

MySQL高性能优化规范建议

腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列

为什么索引能提高查询速度

====================================================

一般在保存少量字符串的时候,我们会选择CHAR或者VARCHAR,而在保存较大文本时,通常会选择使用TEXT或者BLOB。二者之间的主要差别是BLOB能用来保存二进制数据,比如照片;而TEXT只能保存字符数据,比如一遍文章或日记。TEXT和BLOB中又分别包括TEXT,MEDIUMTEXT,LONGTEXT和BLOB,MEDIUMBLOB,LONGBLOB三种不同的类型,他们之间的主要区别是存储文本长度不用和存储字节不用,用户应该根据实际情况选择能够满足需求的最小存储类型。
=====================================================

MySQL索引详细介绍   

高性能mysql之前缀索引

MYSQL索引:对聚簇索引和非聚簇索引的认识

Mysql中MVCC的使用及原理详解

mysql-覆盖索引

drop、truncate和delete的区别

在mysql中删除数据后,添加数据,id值依然从删除的位置开始增加,问题详解。

数据库两大神器【索引和锁】

怎么把原先要花费17s执行的SQL优化到300ms

史上最全的 SQL 优化方案

你说对MySQL事务很熟?那我问你10个问题

MySQL的索引是怎么加速查询的?

 

很用心的为你写了 9 道 MySQL 面试题

为什么 MySQL的常用引擎都默认使用 B+ 树作为索引?

原来MySQL面试还会问这些...    3y  log

史上最全的 SQL 优化方案

分库、分表、分区的区别,傻傻分不清?

InnoDB 中一棵 B+ 树能存多少行数据?

面试官,你要是敢在问我B+树,别怪我不客气!!

MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余

MySQL binlog三种模式,设置模式为ROW

otpimizer trace 表的神奇功效 !!!!explain之外的分析索引使用情况利器

posted @ 2020-03-06 00:08  doyi  阅读(160)  评论(0编辑  收藏  举报