缘由:
被问到了MySQL优化的问题,但平时没有注意总结这方面的内容。所以决定开始总结这方面的知识:先从搜集资料开始,以后会根据实际操作过程中碰到的情况有针对性的对内容进行修改。
参考链接:
- http://dp.im
ysql.com:808 0/node/50 - http://dp.im
ysql.com:808 0/node/49 - http://dp.im
ysql.com:808 0/node/48 - http://dp.im
ysql.com:808 0/node/47 - http://dp.im
ysql.com:808 0/node/46 - http://dp.im
ysql.com:808 0/node/45 - http://dp.im
ysql.com:808 0/node/38 - http://dp.im
ysql.com:808 0/node/37 - http://dp.im
ysql.com:808 0/node/36 - http://dp.im
ysql.com:808 0/node/35 - http://dp.im
ysql.com:808 0/2006_03_05 _mysql_optim ize_1 - =
- site:dp.imysql.com mysql faq
- site:imysql.cn mysql faq
- =
- https://linux.cn/article-5891-1.html
- https://linux.cn/article-2533-1.html
- https://dev.mysql.com/doc/refman/5.5/en/optimizing-the-server.html
- https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb.html
- https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-configuration-variables.html
=EOF=
《 “MySQL的优化” 》 有 7 条评论
项目中常用的19条MySQL优化
https://segmentfault.com/a/1190000012155267
http://bbs.thankbabe.com/topic/81/%E9%A1%B9%E7%9B%AE%E4%B8%AD%E5%B8%B8%E7%94%A8%E7%9A%8419%E6%9D%A1mysql%E4%BC%98%E5%8C%96
`
一、EXPLAIN
二、SQL语句中IN包含的值不应过多
三、SELECT语句务必指明字段名称
四、当只需要一条数据的时候,使用limit 1
五、如果排序字段没有用到索引,就尽量少排序
六、如果限制条件中其他字段没有索引,尽量少用or
七、尽量用union all代替union
八、不使用ORDER BY RAND()
九、区分in和exists, not in和not exists
十、使用合理的分页方式以提高分页的效率
十一、分段查询
十二、避免在 where 子句中对字段进行 null 值判断
十三、不建议使用%前缀模糊查询
十四、避免在where子句中对字段进行表达式操作
十五、避免隐式类型转换
十六、对于联合索引来说,要遵守最左前缀法则
十七、必要时可以使用force index来强制查询走某个索引
十八、注意范围查询语句
十九、关于JOIN优化
`
mysql协议
http://blog.csdn.net/wangyangzhizhou/article/details/79620809
数据库从0到0.1 (一): LSM-Tree VS B-Tree
https://blog.bcmeng.com/post/lsm-tree-vs-b-tree.html
`
1、最简单的数据库
2、Index
3、Hash Index
4、Segment
5、SSTables and LSM-Trees
6、磁盘简介
7、B-Trees
8、B-Tree VS LSM-Tree
9、参考资料
数据库最基本两个功能:数据的存储和数据的查询。 当我们写入数据时,数据库可以存储数据;当我们需要访问数据时,数据库可以给我们想要的数据。 数据库会通过特定的数据模型和数据结构存储数据,并支持通过特定的查询语言访问数据。
本文将从最简单的数据库开始,讨论数据库如何存储数据,如何查询数据。
本文将讨论两种存储引擎:log-structured 存储引擎和以B+树为代表的 page-oriented存储引擎。
`
MySQL InnoDB引擎锁的总结
https://mp.weixin.qq.com/s/D50ledyMfn84u06RNiQSmw
`
为什么要锁
锁的种类
按使用方式
乐观锁
悲观锁
按粒度
表级锁
行级锁
页级锁
InnoDB中加锁
为MySQL加锁
查看锁情况
InnoDB什么时候会锁表
总结:
悲观锁与乐观锁是一种思想,而不是数据库锁机制的实现;
InnoDB的行销是基于索引实现的,如果不通过索引访问数据,InnoDB会使用表锁;
虽然根据标准InnoDB的默认事务隔离级别RR是存在幻读,但是通过间隙锁以及MVCC解决了幻读的问题;
间隙锁的存在会导致并发插入问题,尽量减少范围查询;
InnoDB的索引设计非常重要。
`
如果有人问你数据库的原理,叫他看这篇文章
http://blog.jobbole.com/100349/
http://coding-geek.com/how-databases-work/
`
虽然本文标题很明确,但我的目的并不是讲如何使用数据库。因此,你应该已经掌握怎么写一个简单的 join query(联接查询)和CRUD操作(创建读取更新删除),否则你可能无法理解本文。这是唯一需要你了解的,其他的由我来讲解。
我会从一些计算机科学方面的知识谈起,比如时间复杂度。我知道有些人讨厌这个概念,但是没有它你就不能理解数据库内部的巧妙之处。由于这是个很大的话题,我将集中探讨我认为必要的内容:数据库处理SQL查询的方式。我仅仅介绍数据库背后的基本概念,以便在读完本文后你会对底层到底发生了什么有个很好的了解。
`
一本彻底搞懂MySQL索引优化EXPLAIN百科全书
https://mp.weixin.qq.com/s/rem7Ds_QSnyhlrtNPByQcg
`
# EXPLAIN 输出计划参数详解
1、id 列
2、select_type 列
3、table 列
4、type 列
5、possible_keys 列
6、key 列
7、key_len 列
8、ref 列
9、rows 列
10、filtered 列
11、Extra 列
# 数据库索引最佳实践
1、全值匹配
2、最佳左前缀法则
3、索引列上避免做计算操作
4、范围条件右边的列无法使用索引
5、尽量使用覆盖索引
6、范围条件查找能够命中索引
7、IS NOT NULL 无法使用索引
8、模糊条件查询以通配符开头索引失效
9、字符串类型不加单引号索引失效
10、OR使用多数情况下索引会失效
11、负向查询条件不能使用索引
12、排序对索引的影响
13、局部索引的使用
# 不宜建索引的几点小总结
1)更新非常频繁字段不宜建索引
2)区分度不大的字段不宜建索引
3)业务中有唯一特性的字段,建议建成唯一索引
4)多表关联时,要确保关联字段上必须有索引
5)创建索引时避免建立错误的认识
索引越多越好,认为一个查询就需要建一个索引。
宁缺勿滥,认为索引会消耗空间、严重拖慢更新和新增速度。
抵制唯一索引,认为业务的唯一性一律需要在应用层通过“先查后插”方式解决。
过早优化,在不了解系统的情况下就开始优化。
`
MySQL 千万 级数据量根据(索引)优化 查询 速度
https://www.cnblogs.com/phpdragon/p/8231533.html
MySQL——索引优化实战
https://www.cnblogs.com/songwenjie/p/9402295.html