一.查询优化
1.join关键字优化(原理,类似嵌套循环 Nested Loop)
1.1尽量减少Nested loop循环的总次数
- A表驱动 关联查询 B表
- A--->过滤完10条记录
- B--->过滤完20条记录
- 用小结果集驱动大结果集 ----->大家可以通过查看执行计划了解执行原理
1.2被驱动表的条件尽量在索引列上(优化内存循环,注意索引失效的问题)
1.3当无法保证被驱动表的join条件在索引列上
那么有一个参数join_buffer_size的设置不要太吝啬。
windows--->my.ini linux--->my.cnf文件中
建议join_buffer_size为1MB,如果内存充足的话可以设置为2MB.
每个线程(可以认为是每个连接)多会创建自己的buffer,是独占而不是共享。
2.order by关键字优化
2.1 尽可能在索引列上完成排序操作
2.2 如果不在索引列上,mysql就要启动排序算法(执行计划中可以看到 extra--->filesort)
mysql为了兼容老的版本,有两种进行排序的算法,可以简单的认为(老的排序算法,新的排序算法),新的排序算法,性能更好些,如何使用新的排序算法呢。
2.3 max_length_for_sort_data参数的设置(这个设置直接决定了是用的老的算法还是新的算法)
当我们所有返回字段的最大长度小于这个参数值的时候,mysql会选择新的排序算法,否则使用老的排序算法。
2.4 只返回自己需要的列
2.5 增大sort_buffer_size参数的设置,不是为了进行选择排序算法而设置,减少排序过程中对数据进行分段,就会导致mysql启动临时表存放数据,进行交换排序,大小最好能够容纳需要排序的数据量,也是独占
内存的,不是共享的.
GROUP BY关键字优化
3.1 group by 原理其实是先进行排序,然后进行分组,要用到排序尽可能在索引列上完成分组
3.2 当无法使用索引列,那么max_length_for_sort_data参数的设置.sort_buffer_size参数的设置
3.3 能在where限定的条件就不要去having限定了,有些条件是既可以放在having又可以放在where的时候应该放在where.
DISINCT 关键字的优化
4.1 原理先进行GROUP BY 然后在每组中取出一条记录,在DISINCT关键字中进行分组的不一定先进行排序,如果使用了聚合函数的情况下是要排序的,否则不进行排序工作,大家可以通过查看执行计划.
4.2 很多的优化就和group by类似了。
一.数据库设计优化
1.高效的模型就一定合理吗
1.1范式的问题
最终的目的是避免数据的冗余,保持数据的一致性(修改数据简单)
那个年代存储代价相当昂贵,并发量,数据量没有达到现在互联网的大数据场景
1.2适当冗余数据 让Query尽量减少join(高并发,大数据量的场景下)
例如:高并发的论坛-并发最高的是查看帖子标题和作者昵称,原始的就应该用join。帖子表中冗余存放作者的昵称.查询的时候就避免了join的出现。
修改的时候必须修改两种表(这种修改是极少的也不会出现高并发)
1.3 范式和非范式结合使用
2.大字段垂直拆分甚至引入其它数据源
2.1 一个字段很大,大于其它字段的总和甚至好几倍,但是这个字段又不是频繁使用的字段
2.2 如帖子表
帖子内容是相当大的一个字段我们可以把该字段单独一张表存放,和帖子表一对一关联大大降低访问的IO
如果访问频率很高就应该选择其它NOSQL类的数据源如文档数据库--->Mongodb
2.3 常用字段和不常用字段也做垂直拆分
用户表(常用字段无非就是用户名、密码、昵称、邮箱等,其它像生日、QQ、MSN,地址电话可能很少使用)高并发,有常用字段和极少使用字段,
那么垂直拆分,把常用字段做为一张表大大降低IO,不常用字段单独一张表一对一关联.
3.大表水平拆分
把一张表拆成多张表--->按记录去拆分目的就是一张一张小表呈现,只要少量的数据,要有划分标准。
4.使用合适的数据类型
尽可能占用空间少--->IO,并且计算速度快的类型--->CPU。对mysql数据库的所有类型要详细的了解
5.哪些数据适合放在关系型数据库
结构化数据
二进制多媒体数据 、图片等---->选用其它数据库NOSQL
实时性高的数据----->内存数据库
相关推荐
服务器型号解释 博文链接:https://394498036.iteye.com/blog/2289844
MySQL Cluster是一种高可用、高性能的分布式数据库解决方案,它在MySQL服务器的基础上增加了数据的冗余和分布处理能力。本文将深入探讨MySQL Cluster的核心概念、架构、工作原理以及如何使用。 一、MySQL Cluster...
【MySQL技术资料】-(机构内训资料)MySQL优化学习思维笔记 这是一份专为深入理解MySQL数据库优化设计的学习资料,旨在帮助用户提升在实际工作中处理数据查询效率的能力。MySQL作为世界上最流行的开源关系型数据库...
本资料"MySQL高级_思维导图.pdf"深入探讨了MySQL的一些高级主题,帮助读者理解其核心机制和优化策略。以下是根据提供的思维导图内容展开的详细知识点: 1. **MySQL的架构介绍** MySQL通常采用客户端/服务器架构,...
这份"MySQL优化学习思维笔记"包含了许多关于如何优化MySQL数据库的重要知识点,让我们一起深入探讨。 1. **索引优化**:索引是提高查询速度的关键。理解B-Tree、Hash和Full-text等不同类型的索引,以及如何选择合适...
#### 二、MySQL核心查询 **2.1 简单查询** - **SELECT语句**: `SELECT column1, column2 FROM table_name;` - **WHERE子句**: `SELECT * FROM table_name WHERE condition;` - **ORDER BY子句**: `SELECT * FROM ...
- **查询优化器**:了解MySQL如何选择最佳查询路径,以及如何影响查询性能。 2. **存储引擎** - **InnoDB与MyISAM**:对比分析InnoDB(事务安全,支持行级锁定)与MyISAM(非事务安全,读取速度快)的特点,理解...
- MySQL Cluster:分布式多节点集群,提供高可用性和数据冗余。 9. **分区与分片**: - 表分区:提高大数据量查询性能,如按时间、范围或哈希值分区。 - 数据库分片:将数据分散到多个物理服务器,实现水平扩展...
Redis批量查询优化 Redis高性能集群之Twemproxy of Redis 数据存储 MongoDB NOSQL简介及MongoDB支持的数据类型分析 MongoDB可视化客户端及JavaApi实践 手写基于MongoDB的ORM框架 MongoDB企业级集解决方案 ...
1. SQL优化:包括查询优化、索引优化、存储引擎的选择以及SQL语句的重构,以提高数据查询速度和整体性能。 2. 触发器与存储过程:深入理解触发器的使用场景,如何编写和管理存储过程,提升数据库操作的自动化水平。...
6. **集群与分布式**:MySQL Cluster和InnoDB Cluster,实现分布式数据库系统。 【MySQL存储过程.xmind】可能是一个思维导图,详细梳理了存储过程的概念、创建、调用、参数传递以及在实际项目中的应用案例。 综上...
- 数据库设计与优化 - 存储过程与触发器 **1.3 Linux操作系统** - **知识点**: - Linux系统结构 - 命令行操作 - 文件系统管理 - 进程与线程管理 - Shell脚本编写 **1.4 Web项目实战** - **知识点**: - ...
9. 数据库性能优化:学习索引、查询优化器、查询优化技巧等,以提升数据库的运行效率。 通过阅读本书,结合目录结构图和思维导图,你不仅可以系统地学习数据库理论,还能获得实际操作的技能,为成为合格的数据库...
不仅仅是CDN/Redis数据库索引等常用优化方法更有程序逻辑细节调整,产品策略技巧全新的优化思维4.从单机到web集群,从多服务器到多机房数据中心,服务器资源可随业务规模扩展,不局限于系统极限容量5.加入机器人服务...
10. **性能优化**:包括索引创建、查询优化、分区策略等方法,以提升数据库的读写速度和响应时间。 11. **NoSQL数据库**:随着大数据和分布式计算的发展,非关系型数据库(NoSQL)如MongoDB、Cassandra等成为处理大...
作为java初学者来说,想要快速入门java,首先要了解自己应该学习哪些技术! 前期千万不要盲目直接...| 并发+JVM+Redis+MySQL+分布式+微服务+性能优化 1.计算机网络 2.JVM 3.多线程 4.集合 5.数据库面试专题 6.多线程
思维导图 office--Note 邮件管理 性能优化 分层优化 系统级别 中间件级别 JVM级别 代码级别 分段优化 前端 web应用 服务应用 资源池 数据库 大数据与nosql zookeeper hadoop hbase mongodb ...
DB思维导图中介绍了数据库领域的关键概念,包括CAP理论、SQL与NoSQL数据库的区别,以及NewSQL的特征和部分实例。下面将深入阐述这些知识点。 CAP理论是计算机科学领域分布式系统设计的基础原理之一,它指出在分布式...
- **MySQL优化**:分享MySQL性能调优技巧,包括索引优化、查询语句改进等。 - **JVM调优**:探讨JVM内存模型、垃圾回收机制,并提供实际案例分析。 - **高并发处理**:介绍双十一技术复盘中的高并发秒杀系统设计...