MySQL优化之hints
大妈让我整理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相关推荐
- MySQL优化系列9-MySQL控制查询优化器Hints
备注:测试数据库版本为MySQL 8.0 文章目录 一.控制查询计划评估 二. 可切换的优化 三. 优化器的Hints 3.1 优化器Hints概述 3.2 优化器Hints语法 3.3 连接顺序优化 ...
- mysql hints_MySQL优化之hints
大妈让我整理MySQL优化的一些工具和方法,整理到MySQL hints的时候,没有找到满意的中文文章,于是自己翻译了一篇关于MySQL hints的小文章.如下: 每个程序员都喜欢优化,甚至有时我们 ...
- mysql如何explan优化sql_《MySQL数据库》MySQL 优化SQL(explain)
前言 如果要写出优质的SQL语句,就需要了解MySQL的存储原理.MySQL是如何分析SQL,如何利用索引查询. Explain 关键字 explain select * from ic_base; ...
- MySQL 优化 —— EXPLAIN 执行计划详解
引言 本博客大部分内容翻译自MySQL 官网 Understanding the Query Execution Plan 专题.另外有一些补充,则来自于网课以及<高性能MySQL(第三版)&g ...
- MySQL优化配置之query_cache_size
原理 MySQL查询缓存保存查询返回的完整结果.当查询命中该缓存,会立刻返回结果,跳过了解析,优化和执行阶段. 查询缓存会跟踪查询中涉及的每个表,如果这写表发生变化,那么和这个表相关的所有缓存都将失 ...
- 小型网站到大型网站-Mysql优化
2019独角兽企业重金招聘Python工程师标准>>> 背景 好的大型网站都是从小型网站慢慢演变来的,都不是一步就设计好的.现在的淘宝,03年创建的时候它也是只有一台服务器,使用的是 ...
- 4 个 MySQL 优化工具 AWR,帮你准确定位数据库瓶颈!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:今日头条,作者:老王谈运维 www.toutiao.com/ ...
- mysql优化 博客园_MySQL优化
MySQL优化步骤 首先学会如何定位到SQL语句 1.1查看SQL语句的执行次数 在MySQL中可以通过命令查看服务器该表状态信息 show status like 'Com_______'; 如果想 ...
- MySQL优化—工欲善其事,必先利其器之EXPLAIN
mysql explain命令是查询性能优化不可缺少的一部分. explain output columns 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或者关联查询, ...
- 项目中常用的19条MySQL优化
声明一下:下面的优化方案都是基于 " Mysql-索引-BTree类型 " 的 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单 ...
最新文章
- R语言KMeans聚类分析确定最优聚类簇数实战:间隙统计Gap Statistic(确定最优聚类簇数)
- Mac系统的JDK8默认安装路径
- 深入理解ASCII,Unicode和UTF-8编码
- 防止js全局变量污染方法总结-待续
- (转载)hive文件存储格式
- Ladda – 把加载提示效果集成到按钮中,提升用户体验
- UIBlurEffect实现模糊效果
- 患者砍医生事件的一些胡言乱语
- 每天一道LeetCode-----找到有多少个组合加起来和是n,每个组合的数字只能是1或者2
- JAVA构造对象的几种方式(构建器、构造器)
- ps怎么清屏_黑洞PS大赛刷屏!最后一张扎心了……
- python 获取浏览器句柄下的网页控件_python webdriver操作浏览器句柄
- 刚刚,贝佐斯宣布将辞任亚马逊 CEO 一职!
- 如何使用U盘替换光驱引导部署WES7系统
- 任正非:从未想干翻苹果|用友云SaaS产品“云直播”上市 |【软件网每日新闻播报│第9-28期】
- 反向题在测试问卷信效度_问卷一定要做信度效度检验吗?如果含有多选题怎样做信度分析,请各位高手帮帮忙。...
- HDLC(High-Level Data Link Control)(对比以太网)
- iOS编辑预览视频小结
- 无线蓝牙打印机服务器有什么用,蓝牙打印机价格怎么样 蓝牙打印机有什么用途...
- 人教版计算机三年级教学目标,人教版小学三年级数学下册教学计划