大妈让我整理MySQL优化的一些工具和方法,整理到MySQL hints的时候,没有找到满意的中文文章,于是自己翻译了一篇关于MySQL hints的小文章。如下:

每个程序员都喜欢优化,甚至有时我们知道不应该去做。为了满足大家的意愿,MySQL提供了一些关键字,在SQL语句中使用这些关键字,可以使得数据库按照明确的优化指令执行SQL语句。

应当指出的是,不正确的使用hints很有可能使你的查询语句表现的更糟糕,在使用hints之前需要确保这是有意义的。通常你可以使用explain查看执行计划并阅读hint文档来决定是否用它。

使用SQL注释括住hints也是一个好方法,比如

SELECT /*! SQL_NO_CACHE */ columns FROM table;

这可以使你的应用得到更大的兼容性。

下面介绍一些常用的MySQL优化hints。

SQL_NO_CACHE

SQL_NO_CACHE hint 会使用特殊的查询来关闭MySQL内置的查询缓存机制。在动态性很强或者执行频率很低的查询上使用SQL_NO_CACHE hint,可以帮助MySQL提高缓存的使用效率。不过确保在使用SQL_NO_CACHE hint时,MySQL已经开启了查询缓存,否则没有必要使用。

SELECT SQL_NO_CACHE field1, field2 FROM TABLE1;

关于MySQL查询缓存的更多信息可以查看这里

SQL_CACHE

如果你已经配置了query_cache_type = 2(仅在使用SQL_CACHE时进行缓冲),那么可以使用SQL_CACHE hint来告诉MySQL哪些查询需要进行缓存。

SELECT SQL_CALHE * FROM TABLE1;

HIGH_PRIORITY

在SELECT 或者 INSERT语句中使用 HIGH_PRIORITY hint可以告诉MySQL这是一个高优先级的查询。这个hint允许此查询跳过优先级较低的语句而得到优先执行。

SELECT HIGH_PRIORITY * FROM TABLE1;

LOW_PRIORITY

LOW_PRIORITY hint 可以使用在INSERT 和 UPDATE语句中.如果你使用LOW_PRIORITY 关键字,语句的执行会被延迟到没有其他的读请求时才执行。这意味着你可能等待很长一段时间,甚至在读请求为主的服务器上发生永久等待。

update LOW_PRIORITY table1 set field1=foo where field1=bar;

INSERT DELAYED

一个INSERT LOW_PRIORITY 语句在其得到真正执行之前,不会做任何返回,如果你想立即获得返回值,可以使用INSERT DELAYED 语句。INSERT DELAYED 语句会立即返回,但是依然等到其他客户端关闭了数据表后才执行。

INSERT DELAYED INTO table1 values(xxx);

关于MySQL Insert Delayed的更多信息可以查看这里

注意:INSERT DELAYED 只作用于MyISAM、MEMORY和ARCHIVE表。

STRAIGHT_JOIN

STRAIGHT_JOIN hint告诉MySQL使用FROM从句的顺序来进行表连接。

使用EXPLAIN 来明确MySQL没有指出这个最佳的连接顺序。如果你指定了一个不佳的顺序,可能会使MySQL做很多无需做的工作。

SELECT TABLE1.FIELD1, TABLE2.FIELD2 FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE xxx;

SQL_BUFFER_RESULT

SQL_BUFFER_RESULT hint告诉MySQL将查询的结果放入到临时表中,这样当查询结果还在输出时,就可以解除锁定的数据表。因此你可能只需要在结果集很大的时候使用SQL_BUFFER_RESULT hint。

SELECT SQL_BUFFER_RESULT * FROM TABLE1 WHERE;

SQL_BIG_RESULT

SQL_BIG_RESULT hint 能够与DISTINCT 和 GROUP BY SELECT 语句一起使用,它会告诉MySQL结果集可能会很大。根据MySQL文档,如果使用了这个hint,那么在需要时,MySQL会直接使用磁盘临时表,并且使用GROUP BY的元素关键字对临时表进行排序。

SELECT SQL_BIG_RESULT * FROM TABLE1 WHERE;

SQL_SMALL_RESULT

SQL_SMALL_RESULT基本上与SQL_BIG_RESULT相反。当使用了SQL_SMALL_RESULT时,MySQL使用内存临时表来存储结果而不会进行非索引排序。因此通常这是默认的优化选项,这个hint通常无需使用。

SELECT SQL_SMALL_RESULT * FROM TABLE1 WHERE;

FORCE INDEX

SELECT * FROM TABLE1 FORCE INDEX (FIELD1);

以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。

IGNORE INDEX

SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2);

在上面的SQL语句中,TABLE1表中FIELD1和FIELD2上的索引不被使用。

MySQL优化之hints相关推荐

  1. MySQL优化系列9-MySQL控制查询优化器Hints

    备注:测试数据库版本为MySQL 8.0 文章目录 一.控制查询计划评估 二. 可切换的优化 三. 优化器的Hints 3.1 优化器Hints概述 3.2 优化器Hints语法 3.3 连接顺序优化 ...

  2. mysql hints_MySQL优化之hints

    大妈让我整理MySQL优化的一些工具和方法,整理到MySQL hints的时候,没有找到满意的中文文章,于是自己翻译了一篇关于MySQL hints的小文章.如下: 每个程序员都喜欢优化,甚至有时我们 ...

  3. mysql如何explan优化sql_《MySQL数据库》MySQL 优化SQL(explain)

    前言 如果要写出优质的SQL语句,就需要了解MySQL的存储原理.MySQL是如何分析SQL,如何利用索引查询. Explain 关键字 explain select * from ic_base;  ...

  4. MySQL 优化 —— EXPLAIN 执行计划详解

    引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题.另外有一些补充,则来自于网课以及<高性能MySQL(第三版)&g ...

  5. MySQL优化配置之query_cache_size

    原理 MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段.  查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失 ...

  6. 小型网站到大型网站-Mysql优化

    2019独角兽企业重金招聘Python工程师标准>>> 背景 好的大型网站都是从小型网站慢慢演变来的,都不是一步就设计好的.现在的淘宝,03年创建的时候它也是只有一台服务器,使用的是 ...

  7. 4 个 MySQL 优化工具 AWR,帮你准确定位数据库瓶颈!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:今日头条,作者:老王谈运维 www.toutiao.com/ ...

  8. mysql优化 博客园_MySQL优化

    MySQL优化步骤 首先学会如何定位到SQL语句 1.1查看SQL语句的执行次数 在MySQL中可以通过命令查看服务器该表状态信息 show status like 'Com_______'; 如果想 ...

  9. MySQL优化—工欲善其事,必先利其器之EXPLAIN

    mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...

  10. 项目中常用的19条MySQL优化

    声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...

最新文章

  1. R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
  2. Mac系统的JDK8默认安装路径
  3. 深入理解ASCII,Unicode和UTF-8编码
  4. 防止js全局变量污染方法总结-待续
  5. (转载)hive文件存储格式
  6. Ladda – 把加载提示效果集成到按钮中,提升用户体验
  7. UIBlurEffect实现模糊效果
  8. 患者砍医生事件的一些胡言乱语
  9. 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2
  10. JAVA构造对象的几种方式(构建器、构造器)
  11. ps怎么清屏_黑洞PS大赛刷屏!最后一张扎心了……
  12. python 获取浏览器句柄下的网页控件_python webdriver操作浏览器句柄
  13. 刚刚,贝佐斯宣布将辞任亚马逊 CEO 一职!
  14. 如何使用U盘替换光驱引导部署WES7系统
  15. 任正非:从未想干翻苹果|用友云SaaS产品“云直播”上市 |【软件网每日新闻播报│第9-28期】
  16. 反向题在测试问卷信效度_问卷一定要做信度效度检验吗?如果含有多选题怎样做信度分析,请各位高手帮帮忙。...
  17. HDLC(High-Level Data Link Control)(对比以太网)
  18. iOS编辑预览视频小结
  19. 无线蓝牙打印机服务器有什么用,蓝牙打印机价格怎么样 蓝牙打印机有什么用途...
  20. 人教版计算机三年级教学目标,人教版小学三年级数学下册教学计划

热门文章

  1. erp系统 服务器配置,erp系统需要服务器配置
  2. 浅谈JSP的发展历史
  3. 为什么会出现403 Forbidden错误?三分钟教你快速解决问题!
  4. 租赁风控模型之决策树
  5. 获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件
  6. 403 Forbidden error
  7. Adaptive AUTOSAR Diagnostic Manager模块介绍(一)
  8. cf1009 C. Annoying Present
  9. CSS指北——浮动(Floating)规则详解
  10. Android studio安卓虚拟机无法启动