MYSql 学习优化笔记
来源:互联网 发布:mysql 查询 编辑:程序博客网 时间:2024/04/28 06:46
在学习MySql优化的时候的笔记:
常用优化
1: max()优化: 在相应列上添加索引
2: count()优化:count(*) 会算出包含null记录的数量, count(field_name)只包含不含 null的数量(这也是很多时候两种count方式结果不一致的原因), count()的时候尽量用后一种, count(null)返回0,即不会记录null记录数量
3: 子查询优化=====》(改为)联接查询(如果1对多的关系,注意重复记录)
4: group by优化 如果包含子查询,在子查询里面使用where条件和group by过滤, 避免在复杂查询的最外层使用group by(如果最外层使用会用到临时表)
5: order by , limit 优化:
方式1:尽量使用主键或有索引的列order by;
方式2: 使用自增型的字段: 记录上一次返回的主键或者自增列(此种方式该字段不能有空值,否则会出现有的页面数量不足的问题, 解决的方式是添加附加的index_id, 自增且索引), 过滤时先用大于上一次主键值且小于上一次的主键值+每页的数量, 过滤该字段,然后order by 和limit
PS: 复合索引有效条件:
1: where 条件中依次过滤(最左前缀)
2:排序时: 索引字段有正有反的时候不能使用
3:排序时: 某列有范围查询的时候该列右侧的字段不能使用索引
优化的思路就是尽量避免扫描过多的记录。
创建索引的原则:
1: where, order by ,group by, on从句中的字段
2:索引字段越小越好
3:联合索引时把离散程度高的字段放前面
表级优化
1: 表的范式优化
2: 适当增减一些冗余, 做反范式优化(以空间换取时间)
3: 表的列非常多的时候使用垂直拆分
???????原则:
???????1: 把不常用的单独字段放到一个表中
???????2: 把大字段独立存放到一个表中
???????3: 把经常一起用的字段放在一起
4: 表的数据量非常大的时候使用水平拆分
???????方法:
???????1: 根据某个字段进行hash预算, 如果要拆分成5个表, 用取余的方式取到0-4,分表保到相应的表中
???????2: 针对不同的hashID把数据存到不同的表中
???????问题:
???????1: 跨分区查询的问题
???????2: 统计及后台报表操作
???????(前台使用分表查询, 后台使用汇总表查询做汇总报表操作).
冗余索引检查工具
pt-duplicate-key-checker \-uroot \-p '111111' \-h localhost
以上是学习时的笔记,如有错误和补充,请不吝赐教
- MYSql 学习优化笔记
- MySQL优化学习笔记
- mysql优化学习笔记
- mysql优化 学习笔记
- mysql数据库优化 学习笔记
- mysql查询优化学习笔记
- MySQL数据库优化学习笔记
- MySQL学习笔记 8 -性能优化
- MySQL优化建议--个人学习笔记
- MySQL学习笔记(23)-----------索引优化
- MySQL数据库学习笔记-SQL优化
- MySql 学习笔记一:SQL语句优化
- MySql 学习笔记三:常用SQL优化
- [学习笔记]MySql之SQL语句优化
- mysql学习笔记之优化篇一
- MySQL学习笔记十四:优化(1)
- MySQL学习笔记十五:优化(2)
- 菜鸟学习笔记--Mysql性能优化
- Metal 翻译的一塌糊涂
- java基础第三天、第四天
- MySQL 1067 错误产生的一种原因
- MySQL Workbench不能输入中文的解决
- Word Ladder II
- MYSql 学习优化笔记
- Go语言中反射包的实现原理(The Laws of Reflection)
- netifd [2] - device
- netifd [4] - interface
- netifd [6] - proto
- iOS开发new与alloc/init的区别
- mysql-5.6.4-m7 install in linux
- nginx的安装
- SIFT中的尺度空间和传统图像金字塔