mysql optimizer_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》写的很好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2个菜鸟Java常量和枚举陷阱

在对Java和Groovy代码进行的各种代码审查中,我经常看到魔术数字和其他随机字符串在整个代码库中乱七八糟。 例如,魔术数字是下面的代码(Groovy)中的4.2: if (swashbuckle > 4.2) {... }4.2是什么意思?…

欧拉函数 euler

O - 找新朋友1、欧拉函数 euler()在数论,对正整数n,欧拉函数是 少于或等于n的数中与n 互质 的数的数目。互质:公约数只有 1 的两个整数,称为互质整数。即 最大的公约数也就是 1 euler(&#xf…

mysql cluster 外键_Mysql外键约束

Mysql集群创建外键,分为四种约束:no action,restrict,cascade,set null。如果表A的主关键字是表B中的字段,则该字段称为B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性…

Map类集合遍历

转载于:https://www.cnblogs.com/Neil223/p/7275035.html

小米10解锁bl跳过168_2021年小米红米手机官方解锁BL详细教程+跳过168小时方法合集...

MIUI的解锁风控一直在改动,从之前的无需解锁到现在的168小时绑定限制,时至2021年我们再次重新整理下小米的解锁新规则以及小米解锁常见问题解决方法。比如大家常问的如果跳过168小时解锁时间限制等等小米解锁工具下载:http://miuirom.xiaomi.…

orderby排序慢_使用@OrderBy对Spring Data MongoDB集合进行排序

orderby排序慢这是关于调整和增强Spring Data MongoDB功能的第三篇文章。 这次,我发现我错过了一个JPA功能– OrderBy批注。 OrderBy指定在检索关联值时集合值关联的元素的顺序。 在本文中,我将展示如何使用Spring Data MongoDB使用OrderBy批注实现排序 …

细节取胜的javadoc

今个以为开发经验丰富的同事提出有个改动有问题,希望改一下。老前辈发话,心虚的紧,立即看了下,问题说是我的方法凝视中写了一个 ** doesnt ** 建议改为 does not 说这个生成javadoc有问题。咦。不禁困惑,这个写法我记得…

android实现箭头流程列表_Android开发关于ExpandableListView上下箭头左右显示的笔记...

释放双眼,带上耳机,听听看~!关键属性:android:layoutDirection""当安卓的layoutDirection “rtl” 时,箭头在右边显示布局:android:layout_width"match_parent"android:layout_height…

Java A的新本地变量类型推断

对于编程语言迷来说,新闻几乎比这更令人兴奋! 现在有一个状态为“候选”的本地变量类型推断的JEP 286 。 以及Brian Goetz的反馈请求,我很想邀请您参加: http : //mail.openjdk.java.net/pipermail/platform-jep-discuss/2016-Ma…

扩展kmp

拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀 其中next数组表示T[i,m-1]和T的最长公共前缀 1 const int maxn100010; //字符…

linux中mysql导入数据库命令_linux下mysql数据库导入导出命令

首先linux 下查看mysql相关目录rootubuntu14:~# whereis mysqlmysql:/usr/bin/mysql—- mysql的运行路径/etc/mysql/usr/lib/mysql—– mysql的安装路径/usr/bin/X11/mysql/usr/share/mysql/usr/share/man/man1/mysql.1.gz此外还有一个:var/lib/mysql ——–mys…

转载:FilenameUtils的工具类

一、概述 这是一个Java操作文件的常用库,是Apache对java的IO包的封装,这里面有两个非常核心的类FilenameUtils跟FileUtils,其中FilenameUtils是对文件名操作的封装;FileUtils是文件封装,开发中对文件的操作,几乎都可以…

mysql 5.5.41 下载_MySQL 5.5.41/5.6.22 发布下载

MySQL 5.5.41 发布下载,此版本更新内容如下:编译改进移除了旧版本 Mac OS X 和 XCode 版本的CMake 工作区 (Bug #18510941)Previously, the MYSQL_MAINTAINER_MODE CMake option was turned on by default for debug builds and off for release builds…

envers_分代缓存和Envers

enversKonrad最近在我们公司的技术室中分享了有关如何完成缓存的有趣文章,这是一个大型的波兰社交网络nk.pl。 算法中的核心概念之一是分代缓存 (请参阅此处或此处 )。 基本思想是,对于缓存键,您使用一些特定于实体的字…

mysql ado.net 实体数据模型_Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源...

熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件。但是这个模型向导默认只显示微软自己的SQL Server数据源,如果想使用Mysql数据源&#…

ESP8266学习笔记6:ESP8266规范wifi连接操作

一、前言 我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境、基础功能、进阶学习三大部分。方便自己和他人。可点此查看,欢迎交流。 之前在笔记4《ESP8266的SmartConfig》http://blog.csdn.net/iotisan/article/details/54849410中&#x…

使用Java 8进行分组,转换和归约

1.简介 在上一篇文章中 ,我写了关于如何使用流和分组对对象集合进行分组的文章。 这很有用,但不涵盖特定的用例。 例如,有时我们不仅需要对事物进行分组,还需要将结果转换为更合适的对象。 在这篇文章中,我们将学习如…

rhel6.9 yum安装mysql_在RHEL6.9上安装MySQL5.7

通过YUM方式安装MySQL 5.7Step 1、下载MySQL源wget dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpmyum localinstall mysql-community-release-el6-5.noarch.rpmStep 2、配额yum源并安装MySQLyum-config-manager --disable mysql55-communityyum-config-manager …

正则表达式的\b与\B总结

\b 单词边界,是指单词与符号之间的边界,是一个位置,不是空格或字符。(这里单词可以是中文字符,英文字符,数字;   符号可以是中文符号,英文符号,空格,制表符&#xff0c…

php mysql 取最小值_php – 根据另一个值更新最小值 – MySql

循环遍历数组并检查num是否低于前一个数字.$data数组的示例:$data array([0] > array(id > 9267399, code > 5D:148, num > 64),[1] > array(id > 9267398, code > 5D:186, num > 71));–$array_to_add array();foreach($data AS $val) {…