`
wanxiaotao12
  • 浏览: 467850 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Query 语句优化基本思路和原则

 
阅读更多

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
一个过滤条件的方案一优。

分享到:
评论

相关推荐

    mysqlquery优化[整理].pdf

    **8.2 Query语句优化基本思路和原则** 优化查询的基本思路包括: 1. **理解查询逻辑**:明确查询的目标和过程,简化不必要的条件和结构。 2. **有效使用索引**:合理设计和利用索引可以显著提高查询速度,尤其是在...

    MySQL5.1性能调优与架构设计.mobi

    8.2 Query语句优化基本思路和原则 8.3 充分利用Explain和Profiling 8.4 合理设计并利用索引 8.5 Join的实现原理及优化思路 8.6 ORDER BY、GROUP BY和DISTINCT的优化 8.7 小结 第9章 MySQL数据库Schema设计的...

    mysql_Query优化

    #### 二、Query 语句优化的基本思路和原则 **2.1 Query 语句优化的基本思路** - **理解查询需求**: 首先要明确查询的目的,确保 SQL 语句能够准确表达查询意图。 - **选择合适的索引**: 合适的索引可以极大地提高...

    MySQL性能调优与架构设计.pdf

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    MySQL查询优化.rar

    MySQL查询优化是数据库管理中的关键环节,它直接影响到应用程序的性能和用户体验。在这个主题中,我们将深入探讨SQL诊断调优...理解这些原则和思路,并结合实际场景进行实践,将有助于我们构建高效、稳定的数据库系统。

    MySQL性能调优与架构设计(PDF)

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    MySQL性能调优与架构设计.mobi

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    MySQL性能调优与架构设计(中文版)

     6.3 Query语句对系统性能的影响  6.4 Schema设计对系统的性能影响  6.5 硬件环境对系统性能的影响  6.6 小结  第7章 MySQL数据库锁定机制  7.0 引言  7.1 MySQL锁定机制简介  7.2 各种锁定机制分析...

    MySQL性能调优与架构设计

    如 MySQL Schema 设计的技巧,Query 语句的性能优化方式方法及MySQL Server中SQL层和存储引擎层的优化思路。同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式...

    用Java实现SQL数据库思路探索和构建.pdf

    5. **性能调优**:包括SQL语句优化、表分区、读写分离、缓存策略等,提高系统性能。 此外,使用框架如MyBatis或Hibernate可以简化Java与数据库的交互。MyBatis允许将SQL语句直接写在XML配置文件或注解中,而...

    SQL 优化

    - 使用注释记录代码逻辑和优化思路,方便后续维护和优化。 ##### 15. **游标使用** - **游标**:用于逐行处理数据,但会占用较多系统资源。 - **循环与游标**:尽量使用更高效的循环结构替代游标。 ##### 16. **...

    大华SQL助手(原创)源码

    【大华SQL助手(原创)源码】是一个专为数据库管理设计的工具,它提供了方便的SQL查询、编辑和管理功能。...对于初学者来说,这是一个绝佳的学习平台,而对于有经验的开发者来说,这是一个探索新思路和优化技巧的平台。

    ASP+SQL美食网站设计(源代码+论文)【ASP】.zip

    这个项目不仅包含了网站的源代码,还有一篇详细的论文,可以帮助我们理解其背后的开发过程和设计思路。 ASP是微软开发的一种服务器端脚本语言,用于创建动态网页。在ASP中,开发者可以使用VBScript或JScript编写...

    数据库课后习题答案

    ACID(原子性、一致性、隔离性和持久性)属性是事务处理的基本原则,课后习题可能要求理解并应用这些原则。同时,还要关注并发控制和死锁问题,了解乐观锁和悲观锁的区别以及解决死锁的方法。 数据库安全性是另一个...

    图书管理系统毕业设计 sql+asp

    3. SQL语言:掌握基本的SQL语句,如SELECT、INSERT、UPDATE和DELETE,以及更高级的JOIN、GROUP BY和子查询。 4. 用户认证与授权:实现用户登录和权限管理,确保只有合法用户能访问系统功能。 5. 错误处理和日志记录...

    JSP设计网上商城完整例子+设计报告+sql

    **JSP设计网上商城完整例子** 本项目是一个基于JSP技术实现的网上...7. 数据库设计原则,如正常化和索引优化。 这是一个非常实用的学习资源,对于想要提升JSP和Web开发技能的学生或开发者来说,具有很高的参考价值。

    SQL语言艺术

    不同于传统的SQL教程,本书更侧重于SQL代码的整体设计思路和长期维护策略,而非仅仅聚焦于单个SQL语句的编写。它强调了开发者在编写代码时,应充分考虑到数据量的未来增长、硬件升级和技术变迁,确保代码的长期稳定...

    ASP.NET BS结构的城市酒店入住信息管理系统的设计(源代码+论文).rar

    4. 面向对象编程:系统设计时采用面向对象原则,将业务逻辑、数据和界面分离,提高代码的可维护性和复用性。类、接口、继承、多态等概念在系统中广泛应用。 5. 页面间通信:BS架构下,ASP.NET使用ViewState、...

Global site tag (gtag.js) - Google Analytics