MySQL 的关键词提示:hint

何为hint

在执行一条sql语句时,mysql会生成一个执行计划,而hint就是告诉查询优化器需要按照我们告诉它的方式来生成执行计划。

Hint可基于表的连接顺序、方法、访问路径、并行度等规则对DML(数据操纵语言,DataManipulation Language)语句产生作用,范围如下:

使用的优化器类型:

基于代价的优化器的优化目标,是all_rows还是firsr_rows;

表的访问路径,是全表扫描,还是索引扫描,还是直接用rowid;
表之间的连接类型;
表之间的连接顺序;
语句的并行程度;

常用的hint

强制索引 force index

select * from 表名 force index(field1)...;

以上的sql语句只使用建立在field1上的索引,而不使用其他字段上的索引。

忽略索引 ignore index

select * from 表名 ignore index (field1,field2)...;

上面的sql语句中,表中field1和field2上的索引不被使用。

关闭查询缓冲 sql_no_cache

select sql_no_cache * from 表名;

有一些sql语句需要实时的查询数据,或者并不经常使用,这样就需要把缓冲关了,不管这条sql语句是否被执行过,服务器都不会在缓冲区中查找,每次都会执行。

强制查询缓冲sql_cache

select sql_cache * from 表名;

如果在my.ini 中的query_cache_type设成2,这样只有在使用了sql_cache后,才使用查询缓存。

优先操作 high_priority

select high_priority * from 表名;

high_priority可以使用在select和insert操作中,让mysql知道,这个操作优先进行。

滞后操作 low_priority

update low_priority 表名 set field1='' where field2='';

low_priority 可以使用在insert和update操作中,让mysql知道,这个操作滞后。

延时插入 insert delayed

insert delayed into 表名 set field='';

insert delayed into,是客户端提交数据给mysql,mysql返回ok状态却并未实际执行,而是存储在内存中排队,当mysql有空余时再插入。一个重要的好处是,来自多个用户端的插入请求被集中在一起,编写一个块,比独立执行许多插入要快很多。坏处是不能返回自增ID,以及系统崩溃时,mysql还为来的及被插入的数据将会丢失。

强制连接顺序 straight_join

select table1 field1,table2 field2 from table1 straight_join table2 where ...;

由上面的sql语句可知,通过straight_join强迫mysql按table1、table2的顺序链接表。如果你以为按自己的顺序比mysql推荐的顺序进行连接的效率好的话,就可以通过straight_join来确定连接顺序。

强制使用临时表 sql_buffer_result

select sql_buffer_result * from 表名 where ...;

但我们查询的结果集中的数据比较多时,可以通过sql_buffer_result选项强制将结果集放到临时表中,这样就可以很快地释放mysql的表锁(这样其他的sql语句就可以对这些数据记录进行查询了),并且可以长时间地为客户端提供大量记录集。

分组使用临时表 sql_big_result和sql_small_result

select sql_buffer_result field1,count(*) from 表名 group by field1;

对SELECT语句有效,告诉MySQL优化去对GROUP BY和DISTINCT查询如何使用临时表排序,SQL_SMALL_RESULT表示结果集很小,可以直接在内存的临时表排序;反之则很大,需要使用磁盘临时表排序。

参考:https://blog.csdn.net/yangyang_VV/article/details/124104641

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值