建表的时候,不要用null赋默认值,如:字符串的设置'',数据类型的设为0,不要将null设为默认值。

在MySQL中没有 full [outer] join,用union代替

各种 JOIN SQL:https://mp.weixin.qq.com/s?__biz=MzU4OTI3NzY4OA==&mid=2247483746&idx=1&sn=94b1a14569ff12a4776e48ee8e431ec3

使用 explain 命令显示查询执行计划时,key_len只计算where条件用到的索引长度,而排序和分组就算用到了索引,也不会计算到key_len中。

in适合于外表大而内表小的情况,exists适合于外表小而内表大的情况。

当前会话对表A加上了读锁或写锁,即当前线程锁住了表A,只可以操作表A,就不可以查询其他的表。

多个事务并发执行,会出现的问题:

  1. 丢失更新:在没有事务隔离的情况下,两个事务同时更新一条数据,后一个事务会覆盖前面事务的更新,导致前面的事务丢失更新。
  2. 脏读:事务A先更新数据,但是没有提交,事务B读到了事务A没有提交的数据。
  3. 不可重复读:事务A中,先读到一条数据,事务A还没有结束,此时,事务B对该条数据进行了修改操作,事务A又读到了这条数据,事务A两次读到的数据不同。
  4. 幻读:事务A先读到一批数据,假设读到10条,事务B插入了一条数据,此时,事务A又读这一批数据,发现多了一条,好像幻觉一样。

解决方案--数据库隔离机制

数据库隔离机制 说明 解决的问题
1. 未提交读(read uncommitted) 这是数据库最低的隔离级别,允许一个事务读另一个事务未提交的数据。 解决了丢失更新,但是会出现脏读、不可重复读、幻读。
2. 提交读(read committed) 一个事务更新的数据 在提交之后 才可以被另一个事务读取,即一个事务不可以读取到另一个事务未提交的数据。 解决了丢失更新和脏读,但是会出现不可重复读和幻读。
3. 可重复读(repeatale read) 这是数据库默认的事务隔离级别,保证一个事务在相同条件下前后两次读取的数据是一致的。 解决了丢失更新、脏读和不可重复读,但是会出现幻读。(注:乐观锁可以解决幻读)
4. 序列化(serializable) 这是数据库最高的隔离级别。事务串行执行,不会交叉执行。 解决了所有的问题。

Innodb中的事务隔离级别和锁的关系

MySQL、ORACLE、PostgreSQL等成熟的数据库,出于性能考虑,都是使用了以乐观锁为理论基础的MVCC(多版本并发控制)来避免这两种问题。
行锁防止别的事务修改或删除,GAP锁防止别的事务新增,行锁和GAP锁结合形成的的Next-Key锁共同解决了RR级别在写数据时的幻读问题。

MVCC在MySQL的InnoDB中的实现,详见:https://tech.meituan.com/2014/08/20/innodb-lock.html

master记录二进制日志:

在每个事务更新数据完成之前,master在二进制日志记录这些改变。
MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。
在事件写入二进制日志完成后,master通知存储引擎提交事务。

https://mp.weixin.qq.com/s?__biz=MzU4OTI3NzY4OA==&mid=100000132&idx=1&sn=c3771b2e09739dfa49ebd0cd8b8d0a92&scene=19#wechat_redirect

参考

资料 网址
MySQL性能优化篇 https://mp.weixin.qq.com/mp/homepage?__biz=MzU4OTI3NzY4OA==&hid=2
Innodb中的事务隔离级别和锁的关系 https://tech.meituan.com/2014/08/20/innodb-lock.html

《MySQL性能优化篇》阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. Python3.6 SyntaxError: 'ascii' codec can't decode byte 0xe5 in position 7: ordinal not in range(128)

    Django项目上线之后,死活无法正常运行(本地正常) 开始排查了好久才发现是字符编码问题 前面的小坑基本有一些,好(我)解(忘)决(了). 不好解决的是这个报错: SyntaxError: 'asc ...

  2. 关于Windows自动化卸载软件的思路

    思路 关于控制面板“卸载”关联到的exe是这样的: 注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall ...

  3. Java软件生产监控工具Btrace的使用

    Btrace BTrace是sun公司推出的一款Java 动态.安全追踪(监控)工具,可以在不用重启的情况下监控系统运行情况,方便的获取程序运行时的数据信息,如方法参数.返回值.全局变量和堆栈信息等, ...

  4. docker环境下数据库的备份(postgresql, mysql)

    posgresql 备份/恢复 mysql 备份/恢复 补充 posgresql 备份/恢复 备份 DATE=`date +%Y%m%d-%H%M` BACK_DATA=xxapp-data-${DA ...

  5. 解决windows server 2008R2自动关机

    原因:找到Windows Licensing Monitoring Service服务 是这服务在作祟,这服务是Windows软件许可状态.任务管理器查看有wlms.exe进程. 使用C:\Windo ...

  6. 『Norma 分治』

    Norma Description Input Format 第1行,一个整数N: 第2~n+1行,每行一个整数表示序列a. Output Format 输出答案对10^9取模后的结果. Sample ...

  7. PHP RSA签名

    /** * RSA签名 * @param $data 待签名数据 * @param $private_key 私钥字符串 * return 签名结果 */function rsaSign($data, ...

  8. dotnet学习系列

    这里整理下之前关于dotnet方面的文章索引. 一.dotnet core 系列 dotnet core 微服务教程 asp.net core 系列之并发冲突 asp.net core 系列之中间件进 ...

  9. python 排序 选择排序

    算法思想: 首先从序列中选择一个最值,将这个元素和序列的首地址上的元素交换,这样就完成了一个元素的排序,接下来,重复上述过程,不断的从剩下的序列中选取最值,然后添加到有序部分的末尾(注意,这种添加是通 ...

  10. json解析常见异常

    (1) : org.json.JSONException: Expected a ',' or '}' at 80 [character 81 line 1]   原因:出现乱码了, 导致json格式 ...