Query 语句优化基本思路和原则
1. 优化更需要优化的Query;
2. 定位优化对象的性能瓶颈;
3. 明确的优化目标;
4. 从Explain 入手;
小结果集驱动大结果集
尽可能避免复杂的Join 和子查询()
5. 多使用profile
6. 永远用小结果集驱动大的结果集;
7. 尽可能在索引中完成排序;
8. 只取出自己需要的Columns;
9. 仅仅使用最有效的过滤条件;
仅使用最有效的where过虑条件:并不是where的过虑条件越多,执行效率越高, Query语句性能的优劣最关键的是:选择一条最佳的数据访问路径,如何做到通过访问最少的数据量完成自己的任务,事例如下在最下面
10. 尽可能避免复杂的Join 和子查询;
越复杂的Join 语句,所需要锁定的资源也就越多,所阻塞的其他线程也就越多。
需求: 查找某个用户在所有group 中所发的讨论message 基本信息。
场景: 1、知道用户ID 和用户nick_name
2、信息所在表为group_message
3、group_message 中存在用户ID(user_id)和nick_name(author)两个索引
方案一:将用户ID 和用户nick_name 两者都作为过滤条件放在WHERE 子句中来查询,Query 的执行计
划如下:
sky@localhost : example 11:29:37> EXPLAIN SELECT * FROM group_message
-> WHERE user_id = 1 AND author='1111111111'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: group_message
type: ref
possible_keys: group_message_author_ind,group_message_uid_ind
key: group_message_author_ind
key_len: 98
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)
方案二:仅仅将用户ID 作为过滤条件放在WHERE 子句中来查询,Query 的执行计划如下:
sky@localhost : example 11:30:45> EXPLAIN SELECT * FROM group_message
-> WHERE user_id = 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: group_message
type: ref
possible_keys: group_message_uid_ind
key: group_message_uid_ind
key_len: 4
ref: const
rows: 1
Extra:
1 row in set (0.00 sec)
方案二:仅将用户nick_name 作为过滤条件放在WHERE 子句中来查询,Query 的执行计划如下:
sky@localhost : example 11:38:45> EXPLAIN SELECT * FROM group_message
-> WHERE author = '1111111111'\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: group_message
type: ref
possible_keys: group_message_author_ind
key: group_message_author_ind
key_len: 98
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)
初略一看三个执行计划好像都挺好的啊,每一个Query 的执行类型都利用到了索引,而且都是
“ref”类型。可是仔细一分析,就会发现,group_message_uid_ind 索引的索引键长度为4(key_len:
4),由于user_id 字段类型为int,所以我们可以判定出Query Optimizer 给出的这个索引键长度是
完全准确的。而group_message_author_ind 索引的索引键长度为98(key_len: 98),因为author 字
段定义为varchar(32) ,而所使用的字符集是utf8,32 * 3 + 2 = 98。而且,由于user_id 与
author(来源于nick_name)全部都是一一对应的,所以同一个user_id 有哪些记录,那么所对应的
author 也会有完全相同的记录。所以,同样的数据在group_message_author_ind 索引中所占用的存储
空间要远远大于group_message_uid_ind 索引所占用的空间。占用空间更大,代表我们访问该索引所需
要读取的数据量就会更多。所以,选择group_message_uid_ind 的执行计划才是最有的执行计划。也就
是说,上面的方案二才是最有方案,而使用了更多的WHERE 条件的方案一反而没有仅仅使用user_id
一个过滤条件的方案一优。
分享到:
相关推荐
**8.2 Query语句优化基本思路和原则** 优化查询的基本思路包括: 1. **理解查询逻辑**:明确查询的目标和过程,简化不必要的条件和结构。 2. **有效使用索引**:合理设计和利用索引可以显著提高查询速度,尤其是在...
8.2 Query语句优化基本思路和原则 8.3 充分利用Explain和Profiling 8.4 合理设计并利用索引 8.5 Join的实现原理及优化思路 8.6 ORDER BY、GROUP BY和DISTINCT的优化 8.7 小结 第9章 MySQL数据库Schema设计的...
#### 二、Query 语句优化的基本思路和原则 **2.1 Query 语句优化的基本思路** - **理解查询需求**: 首先要明确查询的目的,确保 SQL 语句能够准确表达查询意图。 - **选择合适的索引**: 合适的索引可以极大地提高...
如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...
MySQL查询优化是数据库管理中的关键环节,它直接影响到应用程序的性能和用户体验。在这个主题中,我们将深入探讨SQL诊断调优...理解这些原则和思路,并结合实际场景进行实践,将有助于我们构建高效、稳定的数据库系统。
如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...
如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...
6.3 Query语句对系统性能的影响 6.4 Schema设计对系统的性能影响 6.5 硬件环境对系统性能的影响 6.6 小结 第7章 MySQL数据库锁定机制 7.0 引言 7.1 MySQL锁定机制简介 7.2 各种锁定机制分析...
如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...
5. **性能调优**:包括SQL语句优化、表分区、读写分离、缓存策略等,提高系统性能。 此外,使用框架如MyBatis或Hibernate可以简化Java与数据库的交互。MyBatis允许将SQL语句直接写在XML配置文件或注解中,而...
- 使用注释记录代码逻辑和优化思路,方便后续维护和优化。 ##### 15. **游标使用** - **游标**:用于逐行处理数据,但会占用较多系统资源。 - **循环与游标**:尽量使用更高效的循环结构替代游标。 ##### 16. **...
【大华SQL助手(原创)源码】是一个专为数据库管理设计的工具,它提供了方便的SQL查询、编辑和管理功能。...对于初学者来说,这是一个绝佳的学习平台,而对于有经验的开发者来说,这是一个探索新思路和优化技巧的平台。
这个项目不仅包含了网站的源代码,还有一篇详细的论文,可以帮助我们理解其背后的开发过程和设计思路。 ASP是微软开发的一种服务器端脚本语言,用于创建动态网页。在ASP中,开发者可以使用VBScript或JScript编写...
ACID(原子性、一致性、隔离性和持久性)属性是事务处理的基本原则,课后习题可能要求理解并应用这些原则。同时,还要关注并发控制和死锁问题,了解乐观锁和悲观锁的区别以及解决死锁的方法。 数据库安全性是另一个...
3. SQL语言:掌握基本的SQL语句,如SELECT、INSERT、UPDATE和DELETE,以及更高级的JOIN、GROUP BY和子查询。 4. 用户认证与授权:实现用户登录和权限管理,确保只有合法用户能访问系统功能。 5. 错误处理和日志记录...
**JSP设计网上商城完整例子** 本项目是一个基于JSP技术实现的网上...7. 数据库设计原则,如正常化和索引优化。 这是一个非常实用的学习资源,对于想要提升JSP和Web开发技能的学生或开发者来说,具有很高的参考价值。
不同于传统的SQL教程,本书更侧重于SQL代码的整体设计思路和长期维护策略,而非仅仅聚焦于单个SQL语句的编写。它强调了开发者在编写代码时,应充分考虑到数据量的未来增长、硬件升级和技术变迁,确保代码的长期稳定...
4. 面向对象编程:系统设计时采用面向对象原则,将业务逻辑、数据和界面分离,提高代码的可维护性和复用性。类、接口、继承、多态等概念在系统中广泛应用。 5. 页面间通信:BS架构下,ASP.NET使用ViewState、...
1. SQL基础:SQL是用于管理和处理关系数据库的标准编程语言,项目中会用到创建数据库、表结构,插入、更新和查询数据等基本操作。理解SQL的SELECT语句,JOIN操作,子查询以及聚合函数是必要的。 2. 数据库设计:在...