热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MySQL5.78.2.1OptimizingSELECTStatements(优化SELELCT语句)

Queries,intheformof SELECT statements,performallthelookupoperationsinthedatabase.查询以SELECT

Queries, in the form of SELECT statements, perform all the lookup operations in the database.

查询以SELECT语句的形式执行数据库中的所有查找操作。

Tuning these statements is a top priority, whether to achieve sub-second response times for dynamic web pages, or to chop hours off the time to generate huge overnight reports.

调优这些语句是最重要的,无论是为了实现动态网页的次秒级响应时间,还是为了减少生成大量夜间报告的时间。

Besides SELECT statements, the tuning techniques for queries also apply to constructs such as CREATE TABLE...AS SELECT, INSERT INTO...SELECT, and WHERE clauses in DELETE statements. 

除了SELECT语句,查询的调优技术也适用于诸如CREATE TABLE…As select, insert into…DELETE语句中的SELECT和WHERE子句。

 Those statements have additional performance considerations because they combine write operations with the read-oriented query operations.

这些语句有额外的性能考虑因素,因为它们将写操作与面向读的查询操作结合在一起。

NDB Cluster supports a join pushdown optimization whereby a qualifying join is sent in its entirety to NDB Cluster data nodes, where it can be distributed among them and executed in parallel. For more information about this optimization, see Conditions for NDB pushdown joins.

NDB集群支持一个连接下推优化,通过这个优化,一个合格的连接被完整地发送到NDB集群的数据节点,在那里它可以分布在它们之间并并行执行。有关此优化的更多信息,请参见NDB下推连接的条件。

The main considerations for optimizing queries are:

优化查询的主要考虑事项是:

To make a slow SELECT ... WHERE query faster, the first thing to check is whether you can add an index. Set up indexes on columns used in the WHERE clause, to speed up evaluation, filtering, and the final retrieval of results. To avoid wasted disk space, construct a small set of indexes that speed up many related queries used in your application.

要做一个缓慢的SELECT…在查询速度更快的地方,首先要检查的是是否可以添加索引。在WHERE子句中使用的列上设置索引,以加快对结果的计算、筛选和最终检索。为了避免浪费磁盘空间,可以构建一小组索引,以加速应用程序中使用的许多相关查询。

Indexes are especially important for queries that reference different tables, using features such as joins and foreign keys. 

索引对于使用连接和外键等特性引用不同表的查询尤其重要。

You can use the EXPLAIN statement to determine which indexes are used for a SELECT. See Section 8.3.1, “How MySQL Uses Indexes” and Section 8.8.1, “Optimizing Queries with EXPLAIN”.

您可以使用EXPLAIN语句来确定用于SELECT的索引。

Isolate and tune any part of the query, such as a function call, that takes excessive time.

隔离和调优查询的任何部分(如函数调用),因为这些部分占用了过多的时间。

Depending on how the query is structured, a function could be called once for every row in the result set, or even once for every row in the table, greatly magnifying any inefficiency.

根据查询的结构,可以对结果集中的每一行调用一次函数,甚至可以对表中的每一行调用一次函数,这大大提高了效率

Minimize the number of full table scans in your queries, particularly for big tables.

在查询中尽量减少全表扫描的次数,特别是对于大表。

Keep table statistics up to date by using the ANALYZE TABLE statement periodically, so the optimizer has the information needed to construct an efficient execution plan.

通过定期使用ANALYZE table语句,来保持表统计信息的更新,这样优化器就有了构建高效执行计划所需的信息。

Learn the tuning techniques, indexing techniques, and configuration parameters that are specific to the storage engine for each table.

学习特定于每个存储引擎的调优技术、索引技术和配置参数。

Both InnoDB and MyISAM have sets of guidelines for enabling and sustaining high performance in queries. For details, see Section 8.5.6, “Optimizing InnoDB Queries” and Section 8.6.1, “Optimizing MyISAM Queries”.

InnoDB和MyISAM都有一套在查询中启用和保持高性能的指导原则。

You can optimize single-query transactions for InnoDB tables, using the technique in Section 8.5.3, “Optimizing InnoDB Read-Only Transactions”.

你可以优化InnoDB表的单查询事务

Avoid transforming the query in ways that make it hard to understand, especially if the optimizer does some of the same transformations automatically.

避免以难以理解的方式转换查询,特别是在优化器自动执行一些相同的转换时。

If a performance issue is not easily solved by one of the basic guidelines, investigate the internal details of the specific query by reading the EXPLAIN plan and adjusting your indexes, WHERE clauses, join clauses, and so on. (When you reach a certain level of expertise, reading the EXPLAIN plan might be your first step for every query.)

如果性能问题不容易通过基本准则解决,可以通过阅读EXPLAIN计划并调整索引、WHERE子句、连接子句等来研究特定查询的内部细节。(当您达到一定的专业水平时,阅读EXPLAIN计划可能是您处理每个查询的第一步)

Adjust the size and properties of the memory areas that MySQL uses for caching.

调整MySQL用于缓存的内存区域的大小和属性。

With efficient use of the InnoDB buffer pool, MyISAM key cache, and the MySQL query cache, repeated queries run faster because the results are retrieved from memory the second and subsequent times.

通过有效地使用InnoDB缓冲池、MyISAM密钥缓存和MySQL查询缓存,重复查询运行得更快,因为结果后面是从内存中检索。

Even for a query that runs fast using the cache memory areas, you might still optimize further so that they require less cache memory, making your application more scalable.

即使对于使用缓存内存区域快速运行的查询,您仍然可以进一步优化,以便它们需要更少的缓存内存,从而使应用程序更具可伸缩性。

Scalability means that your application can handle more simultaneous users, larger requests, and so on without experiencing a big drop in performance.

可伸缩性意味着您的应用程序可以处理更多的并发用户、更大的请求等等,而不会出现性能上的大下降。

Deal with locking issues, where the speed of your query might be affected by other sessions accessing the tables at the same time.

处理锁定问题,其中查询的速度可能会受到同时访问表的其他会话的影响。



推荐阅读
  • poj 3352 Road Construction ... [详细]
  • 本文介绍了如何利用ObjectMapper实现JSON与JavaBean之间的高效转换。ObjectMapper是Jackson库的核心组件,能够便捷地将Java对象序列化为JSON格式,并支持从JSON、XML以及文件等多种数据源反序列化为Java对象。此外,还探讨了在实际应用中如何优化转换性能,以提升系统整体效率。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文介绍如何使用线段树解决洛谷 P1531 我讨厌它问题,重点在于单点更新和区间查询最大值。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在C++程序中,文档A的每一行包含一个结构体数据,其中某些字段可能包含不同数量的数字。需要将这些结构体数据逐行读取并存储到向量中,随后不仅在控制台上显示,还要输出到新创建的文档B中。希望得到指导,感谢! ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • Codeforces 605C:Freelancer's Dreams —— 凸包算法解析与题解分析 ... [详细]
  • 在处理木偶评估函数时,我发现可以顺利传递本机对象(如字符串、列表和数字),但每当尝试将JSHandle或ElementHandle作为参数传递时,函数会拒绝接受这些对象。这可能是由于这些句柄对象的特殊性质导致的,建议在使用时进行适当的转换或封装,以确保函数能够正确处理。 ... [详细]
author-avatar
淅沥的雨的海角_960
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有