mysql 参数optimizer_switch
mysql 5.1中开始引入optimizer_switch, 控制mysql优化器行为。他有一些结果集,通过on和off控制开启和关闭优化器行为。使用有效期全局和会话两个级别,在5.5中optimizer_swtich 可取结果如下,不同mysql版本可取结果不同。5.1和5.6参考官方文档。
mysql> select @@optimizer_switch;
+------------------------------------------------------------------------------------------------------------------------+
| @@optimizer_switch |
+------------------------------------------------------------------------------------------------------------------------+
| index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on |
+------------------------------------------------------------------------------------------------------------------------+
在mysql优化语句过程中,可通过设置optimizer_switch控制优化行为。
在我们生产环境上,某天mysql服务器压力特别大,load一度达到了100,查询发现数据库中有大量的sql语句state 状态result sorting ,result sorting这种排序特别消耗cpu和内存资源。抽取其中的一条sql查看执行计划
mysql> explain selectproduct_id,main_product_id,is_main_product,external_product_id from product where shop_id = '5939' AND status in ('0') AND main_product_id in ('0') AND product_type in ('0','1') order by operator_datedesc limit 800,100;
+----+-------------+----------------+-------------+---------------------------------------------+--------------------------------+---------+------+------+------------------------------------------------------------------------------+
| id | select_type |table |type |possible_keys |key | key_len | ref | rows |Extra |
+----+-------------+----------------+-------------+---------------------------------------------+--------------------------------+---------+------+------+------------------------------------------------------------------------------+
| 1 |SIMPLE | product_common |index_merge | main_product_id,shop_id,status,product_type |shop_id,main_product_id,status | 5,5,5 | NULL | 810 | Usingintersect(shop_id,main_product_id,status); Using where; Using filesort
type类型是 index_merge(索引合并排序)。业务需要或滥建索引,数据表上会建很多索引。针对这个查询,可以通过修改optimizer_switch来优化优化器行为:
set global optimizer_seitch="index_merge=off"
这个方式也行会有一定风险,影响其他sql,在服务器端操作要谨慎
另外一种方式:如果建立的索引不合理,可以建立复合索引,然后删掉这些单列索引,这样sql效率也会提高。本身index_merge提高查询效率,由于本身的特点,可能会引起性能问题,那么,应该建立复合索引还是单列索引,这篇文章《multi-column-indexes-vs-index-merge》写的很好。
mysql 参数optimizer_switch的更多相关文章
- MySQL程序之mysql参数详解
MySQL程序之mysql参数详解 mysql 是一个命令行客户程序,用于交互式或以批处理模式执行SQL语句 用法: mysql [OPTIONS] [database] 参数: 1.-? --hel ...
- Mysql 性能优化4 mysql参数配置
mysql 参数的介绍 大概450项参数,大多保持默认就可以了 错误的参数 崩溃,错误,运行缓慢. 参数最好在生产环境前配置好.最好不要在生产环境 中 直接配置,有可能不会立即生效,或者之前的数据和配 ...
- MySQL参数优化案例
环境介绍 优化层级与指导思想 优化过程 最小化安装情况下的性能表现 优化innodb_buffer_pool_size 优化innodb_log_files_in_group&innodb_l ...
- MySQL参数文件及参数修改方法
MySQL参数文件: MySQL数据库初始化参数由参数文件来设置,如果没有设置参数文件,mysql就按照系统中参数的默认值来启动. 在windows和linux上,参数文件可以被放在多个位置,数据库启 ...
- 官方推荐的MySQL参数设置值
这oracle官方推荐的在OLTP环境下,MySQL参数设置的最佳实践. 下面的参数设置,对系统的性能会很有帮助.但是建议大家还是结合实际情况使用. APPLIES TO: MySQL Server ...
- [MySQL] 参数: innodb_flush_log_at_trx_commit和sync_binlog
MySQL参数: innodb_flush_log_at_trx_commit和sync_binlog innodb_flush_log_at_trx_commit和sync_binlog是MySQL ...
- mysql参数讲解
MySQL配置参数详解: http://blog.csdn.net/wlzx120/article/details/52301383 深入理解mysql参数 http://blog.itpub.net ...
- docker环境下mysql参数修改
原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...
- mysql参数sql_log_bin配置
mysql参数sql_log_bin配置 如果想在主库上执行一些操作,但不复制到slave库上,可以通过修改参数sql_log_bin来实现.比如说,这里模拟主从同步复制异常. 还有一种场景,就是导入 ...
随机推荐
- HDU 2962 Trucking
题目大意:给定无向图,每一条路上都有限重,求能到达目的地的最大限重,同时算出其最短路. 题解:由于有限重,所以二分检索,将二分的值代入最短路中,不断保存和更新即可. #include <cstd ...
- Oracle 动态查询,EXECUTE IMMEDIATE select into使用方法
create or replace procedure TEST_TABLE is l_table_name varchar2(50); query_stat varchar2(100); l_zyq ...
- vs调试MEX文件
http://www.cnblogs.com/lukylu/p/4042306.html matlab里面无法单步调试mex函数,故需转到VS上面调试,这里采用VS2010. 参考网上很多人写的方法但 ...
- Oracle数据库的启动和关闭实例
在开始了解oracle数据库的命令之前,先来看一个东西:SQL*PLUS(sqlplus) Oracle的sql*plus是与oracle进行交互的客户端工具.在sql*plus中,可以运行sql*p ...
- myEclipse快捷键及其常用设置
快捷键: 查找替换:ctrl + f 复制行: ctrl + alt + down 删除行: ctrl + d 插入行: shift + enter, ctrl + shift ...
- oracle去除字符串中间的空格
update AC01 A set A.AAC003 = REGEXP_REPLACE(A.AAC003, '( ){1,}', '') WHERE A.AAC002 IN (SELECT AAC00 ...
- 【c语言】求最大值
一.我个人觉得求最大值比较简单的一种方法(当然同时求最大值和最小值时稍微改改也能行) #include <stdio.h> int main(void) { int f, i, max; ...
- Sticks(poj 1011)
题目描述: Description George took sticks of the same length and cut them randomly until all parts became ...
- 第一章:介绍Django
django简单来说就是一个Web开发框架.Web框架为应用程序提供了一套程序框架,这样你可以专注于编写清晰.易维护的代码,而无需从头做起. models.py文件主要用一个Python类来描述数据表 ...
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra算法 ———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径. ...