引言

最近为了研究索引的知识,特地去MySQL 官网研读了一番,发现MySQL官网有比较全面的MySQL优化方案和知识背景,所以希望通过一系列文章,将官网的知识翻译总结一下,避免日后去网上胡乱搜索产生不必要的知识勘误风险。

本系列文章标题都会以 “MySQL 优化” 前缀开头,有些可能是翻译,也会有少量自己的总结和试验,针对 MySQL 5.7 版本进行。当然也并不会全部将官网的优化专题翻译完,可能会挑选我自己认为比较重点的部分进行翻译和总结。

我的翻译文章大多数都没有精推细敲的进行翻译,可能有人会比较失望,但考虑到我的工作状态和时间不允许我过度的专注于翻译工作,不过我依然会秉承最质朴的求真精神,把翻译工作做好。同时,为了避免个人英语水平对原文知识的误读,我会在每篇翻译文章的引言部分贴出原文的 URL 方便他人去查阅和对比阅读增加知识的准确性同时我更希望能有人站出来指正我的错别字和翻译问题

再次强调一下我的翻译风格,并不是精推细敲型,会以一种比较松散但并不丢失原意的方式来翻译MySQL官方文档。如下是我的翻译示例:

原文:To make a slow SELECT ... WHERE query faster, the first thing to check is whether you can add an index.

我的翻译:为了让一个 SELECT ... WHERE 执行的更快,第一件需要考虑的事情就是——我们是否可以为其建立索引。

这就是——“比较松散,但无伤原意”,希望大家多多指正。

以下部分翻译自MySQL官网:https://dev.mysql.com/doc/refman/5.7/en/select-optimization.html

SQL优化需要考虑的方面

查询,以 SELECT 子句的形式,执行着对数据库的全部查找操作。调试这些语句是优先级最高的,不论是在动态web页面实现次秒级别的响应,还是缩短生成大量夜间报告的时间,都是如此。

除了 SELECT 语句,这些用于查询性能优化的调试技术同样会应用于构建诸如 CREATE TABLE... AS SELECT, INSERT INTO ...SELECT, 和 DELETE 语句中的 WHERE 子句等。这些语句需要额外的性能考虑,这是因为他们结合了写和读的操作。

最主要的性能优化考虑有如下这些:

1、为了让一个 SELECT ... WHERE 执行的更快,第一件需要考虑的事情就是——我们是否可以为其建立索引。给 WHERE 子句中的字段建立索引,以此来加速求值、过滤以及对结果集进行的最终检索。为了避免浪费磁盘空间,构建一个“小集合”式的复合索引来加速许多相关的查询。(博主:意思是复合索引不仅可以减少对磁盘空间的过度占用,同时也可以支持许多相关的查询,因此,不要创建太多的单一索引,可以用复合索引的地方,要优先考虑复合索引)

索引在涉及使用诸如 join 和 外键等的多表查询时尤其重要。你可以使用 EXPLAIN 语句来判断在 SELECT 中究竟用到了哪种索引。

2、单独调试非常耗时的查询的每一个部分,如MySQL函数调用等。一个函数可以被结果集中的每条记录执行一遍,也可以被表表中的每条记录执行一遍,这取决于查询的结构,即我们如何构建我们的查询语句。

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

4、定期使用 ANALYZE TABLE 语句来进行表统计,这样SQL优化器才可以有更多的信息来构建有效的执行计划。

5、学习调试技术,索引技术,和配置参数,它们都是特定于每张表的存储引擎的。InnoDB和MyISAM 都有一系列的教程来使我们的查询保持更高的性能。

6、调整MySQL用于缓存的内存区域大小和配置。以有效的方式使用 InnoDB buffer pool,MyISAM key cache,和 MySQL 查询缓存,重复的查询之所以会运行的更快,是因为第二次之后都是从内存中获取数据的。

7、即便是使用内存作为缓存的查询,你可能依然需要更深入的优化以便使它们需要更少的缓存内存,让你的应用程序具备更好的可扩展性。可扩展性意味着你的应用程序可以处理更多同时访问的用户,更大的请求量,而不会产生比较大的性能落差。

8、处理锁的相关问题。在你的查询速度可能会被其他同时访问表的 session 影响到的地方处理锁的问题。

我的总结

总的来说,本篇概述的翻译工作还算顺利,当然非常感谢有道词典对我的帮助,越到后面的部分,翻译工作越顺利,查词典的次数也越来越少。不得不说多看英文文档对自己的提升也是很大的,不仅可以获得最权威的技术解读,同时对英语阅读也有很大帮助。

针对上面的 8 个方面,我个人认为比较重要的是其中的第 1、5,其中第一条应该是占据程序员优化的大部分工作,因此我会对这一专题进行着重翻译和总结,其他的部分我也会根据情况和实际工作中的需要(开发方面,非专业DBA)酌情处理,希望大家可以给予更多的意见和建议。

MySQL 优化 —— SQL优化概述(优化专题开篇词)相关推荐

  1. mysql慢SQL探测与优化

    探测手法: 慢查询一般是由于sql逻辑过于复杂或者索引失效导致的.查找慢SQL的策略就不外乎从这两个方向入手了. 更为详细的操作: (1)mysql慢查询日志: (2)mysql之SQL热分析: (3 ...

  2. mysql 如何优化sql语句,如何优化SQL?MySQL中超实用的SQL语句送给大家

    如何优化SQL?MySQL中超实用的SQL语句送给大家 如何优化SQL?MySQL中超实用的SQL语句送给大家 在写SQL时,经常灵活运用一些SQL语句编写的技巧,可以大大简化程序逻辑.减少程序与数据 ...

  3. MySQL的SQL语句如何优化?

    1) 现场抓出慢查询语句 show full processlist; 2) 配置参数: slow_query_log_file = ON            慢查询开启开关 long_query_ ...

  4. mysql优化(SQL语句的优化以及索引的应用范围)

    2008-09-09 14:37 SQL 优化的原则是:将一次操作需要读取的BLOCK 数减到最低. 调整不良SQL 通常可以从以下几点切入: 检查不良的 SQL ,考虑其写法是否还有可优化内容: 检 ...

  5. 数据库-优化-SQL及索引优化

    SQL及索引优化 mysql安装与卸载(linux在线安装与卸载) 数据库版本选择 1.查看数据库的版本 select @@version; 2.准备数据 网址:https://dev.mysql.c ...

  6. 数据库:MySQL大批量SQL插入性能优化

    对于一些数据量较大的数据库系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长.特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久.因此,优化数据库插入性能是很有意 ...

  7. MySQL批量SQL插入性能优化

    注意事项: 1. SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M,测试时修改为8M. 2. 事务需要控 ...

  8. 【教3妹学mysql】一条慢sql如何排查优化

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站.  坚持不懈,越努力越幸运,大家一起学习鸭~~~ 2哥:3妹,干嘛呢,你有没有看到新闻.成都的核 ...

  9. 读薄《高性能MySql》(四)查询性能优化

    读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...

最新文章

  1. rust图形编程_国产编程语言“木兰”,你以为是个王者,结果是个玩笑
  2. 【Python】APScheduler定时任务
  3. sqlserver 还原bak文件 查看不到_SQL server中用T-SQL语句实现(建库,分离,附加,备份,还原)...
  4. 计算机有什么著名基金经理排名,百万年薪的基金经理,都是什么专业出身?!...
  5. 907计算机专业基础与408相比,2018年北京大学信息科学技术学院907计算机专业基础之计算机操作系统考研强化五套模拟题...
  6. mybatis No enum const class org.apache.ibatis.type.JdbcType.Date 坑爹的配置
  7. 恢复oracle中误删除delete的数据、drop掉的表
  8. python中plot不能显示标签_解决python中使用plot画图,图不显示的问题
  9. Python 类的特殊成员介绍
  10. 系统集成项目管理工程师(软考中级)知识点总结【挣值分析】【关键路径】
  11. Javashop连锁门店管理系统带您玩转获客
  12. 树莓派chromium-os系统发布
  13. python xlwt 表格样式
  14. STC51单片机-实验开发装置仿真-物联网应用系统设计
  15. 关于Django响应速度慢的问题
  16. Linux常用基本命令详解(三)
  17. html日历页面节假日_基于jquery实现可查询节假日万年历代码
  18. JS 事件捕获、事件冒泡以及事件委托图文详解
  19. CF11A Increasing Sequence(C++)
  20. CCF 201604-2 俄罗斯方块

热门文章

  1. java jar包示例_Java包getSpecificationVersion()方法和示例
  2. Spring Cloud Alibaba 深度解密!
  3. Tesseract Ocr文字识别
  4. iOS通用链接(Universal Links)突然点击无效的解决方案
  5. windows10 vscode 构建最强大的 Mingw C++ gcc 编译环境
  6. CentOS7 搭建Kafka消息队列环境,以及Python3操作Kafka Demo
  7. 友盟小米收不到推送消息_Android 推送集成华为,小米,友盟
  8. 同时运行两个PHP吗,PHP-避免由两个工作人员同时运行后台作业
  9. vue修改计算属性的值_「Vue学习记录五」计算属性和侦听器
  10. for循环如果先--_乐字节Java循环:循环控制和嵌套循环