mysql执行计划

mysql索引最左匹配原则

匿名 (未验证) 提交于 2019-12-02 22:06:11
转自知乎问题: mysql索引最左匹配原则的理解? 具体问题描述如下: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name_cid_INX` (`name`,`cid`), KEY `name_INX` (`name`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 随便建了一个student表做测试。 create INDEX name_cid_INX ON student(name,cid) ; create INDEX name_INX ON student(name); 建了两个索引,故意这样建的。 执行1: EXPLAIN SELECT * FROM student WHERE name = '小红' ; 依据mysql索引最左匹配原则,两个索引都匹配上了,这个没有问题。。 执行2: EXPLAIN SELECT * FROM student WHERE cid = 1 ; EXPLAIN SELECT * FROM student WHERE cid=1

MySQL高级学习笔记

匿名 (未验证) 提交于 2019-12-02 22:06:11
1.二进制日志log-bin(主要用于主从复制) 2.错误日志log-error(默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等) 3.查询日志log(默认是关闭的,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源) 4.数据文件(目录/var/lib/mysql,frm文件存放表结构,myd文件存表表数据,myi文件存放表索引) mysql读sql从from开始解析,重组。 第一层客户端连接层 第二层管理服务层(包含连接池、sql接口、解析器&转化器、优化器、缓冲器) 第三层可拔插的数据库引擎层 第四层 文件系统存储层 总结 :和其他数据库相比,MySQL有点与众不同,他的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的 架构上, 插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离 。这种架构可以根据业务的需求和实际需要选 择合适的存储引擎。 块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示17和25之间的磁盘块,P3表示大于35的磁盘块。 真实的数据存在于叶子节点 即3、5、9、10、15、28、29、36、60、75、79、90、99。 非叶子节点不存储真是的数据,只存储指引搜索方向的数据项 ,如17、35并不真是存在于数据表中。

MySQL 8 新特性之Invisible Indexes

匿名 (未验证) 提交于 2019-12-02 22:06:11
背景 索引是把双刃剑,在提升查询速度的同时会减慢DML的操作。毕竟,索引的维护需要一定的成本。所以,对于索引,要加上该加的,删除无用的。前者是加法,后者是减法。但在实际工作中,大家似乎更热衷于前者,而很少进行后者。究其原因,在于后者,难。难的不是操作本身,而是如何确认一个索引是无用的。 如何确认无用索引 在不可见索引出现之前,大家可以通过sys.schema_unused_indexes来确定无用索引。在MySQL 5.6中,即使没有sys库,也可通过该视图的基表来进行查询。 mysql> show create table sys.schema_unused_indexes\G *************************** 1. row *************************** View: schema_unused_indexes Create View: CREATE ALGORITHM=MERGE DEFINER=`mysql.sys`@`localhost` SQL SECURITY INVOKER VIEW `sys`.`schema_unused_indexes` ( `object_schema`,`object_name`,`index_name`) AS select `t`.`OBJECT_SCHEMA` AS `object

MySQL高级部分笔记

匿名 (未验证) 提交于 2019-12-02 22:06:11
有关于MySQL的高级部分笔记 这是一篇关于 MySQL 高级部分的笔记主要是,sql优化以及mysql锁的相关内容,以及主从配置等内容等比较基础的优化 一、逻辑架构部分 逻辑架构 逻辑架构介绍图如下        连接层:最上层是一些客户端和连接服务,包含本地的sock通讯大多时基于客户端/服务端工具实现的类似于tcp/ip的通讯 服务层:完成大多数的核心服务的功能,如,SQL接口,并完成缓存的查询SQL的分析和优化以及部分内置函数的执行,所有款存储引擎的功能 引擎层:存储引擎真正的负责了MySQL中的数据的存储和提取,服务器通过api与存储引擎进行通讯,常用的有MyISAM和InnoDB 存储层:数据存储在裸设备上,并完成与存储引擎的交互 优化主要是只使SQL的解析格式符合优化器的优化格式 存储引擎 查看mysql的存储引擎命令 # 看你的mysql提供了生么存储引擎show engines;# 看当前默认的存储引擎show variables like '%storage_engine%'; MyISAM与InnoDB的对比如下表 对比项 MyISAM InnoDB 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条记录也会锁住整个表, 不适合高并发的操作 行锁,操作时只锁某一行,不对其他的行有影响, 适合高并发的操作 缓存 只缓存索引不缓存真实数据

mysql查询优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
开启方法: set optimizer_trace="enabled=on"; 在执行完目标语句后执行如下sql即可看到执行计划日志 select * from information_schema.OPTIMIZER_TRACE; 准备阶段: 优化阶段:条件处理 常量传递 equality_propagation a = 1 AND b > a -- 会被优化为如下形式 a = 1 AND b > 1 等值传递 constant_propagation sql a = b and b = c and c = 5 -- 会被优化为如下形式 a = 5 and b = 5 and c = 5 移除无用条件 trival_condition_removal a = 1 and 1 = 1 -- 会被优化为如下形式 a = 1 一个查询可以有不同的执行方案,可以选择某个索引进行查询,也可以选择扫描全表,查询优化器会选择其中成本最低的方案进行查询。 IO成本 innodb存储引起需要将数据和索引都存储在磁盘上,当我们想要查询表数据时,需要先把数据或者索引加载到内存中再进行操作。 CPU成本 读取以及检测记录是否满足对应的搜索条件,对结果集进行排序这些操作损耗的时间称为CPU成本。 InnoDB存储引擎规定读取一个页面花费的默认成本是1.0读取以及检测一条记录是否符合搜索条件的成本是0.2

mysql实践:sql优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
---恢复内容开始--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 3. 最好不要有为Null的列,原因: https://mp.weixin.qq.com/s/U4RRNVj5BKwkQ-CWmPd9Fg 查询表的时候 1. 最好不要使用联表查询(风险不可控)【理论上禁止】 2. 不要在字段当中进行函数运算【禁止】 3. 尽量不要使用now()函数进行查询【禁止】 5. 删除全表数据的时候用truncate而不是delete 6. 尽量不要使用模糊匹配 '%abc%'【理论上禁止】 7. sql语句不要写的过于复杂,逻辑判断尽量在内存中完成 8. 不要加入触发器 9. 使用explain查看执行计划 加索引的时候 1. 添加索引的字段一定要有很好的区分度【cardinality】 2. 更新数据的时候最好使用主键作为更新条件 3. 加入联合索引要把区分度高的字段放在前面 4. 不常访问的列不要加索引 5. 长字符串不要加索引,如果一定要加,选取字符串的前n位加上。(n根据实际情况设定,经验值不会超过20) ---恢复内容结束--- 设计表的时候 1. 不同的表涉及同一个公共意义字段不要使用不同的数据类型(可能导致索引不可用,查询结果有偏差) 3. 最好不要有为Null的列,原因: https://mp

Mysql中 SQL的执行过程与优化

匿名 (未验证) 提交于 2019-12-02 22:02:20
1、客户端发送一条sql给服务器,sql服务器的监听端口响应客户端的请求; 2、服务端通过权限检查之后,先会检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果,否则进入下一阶段; 3、服务器端进行sql解析,即通过sql解析器检查是否有语法错误,形成解析树;然后进行预处理,即处理解析树,比如常量如何处理、sql中的计算怎么处理等;再由优化器根据该sql所涉及到的数据表的统计信息进行计算,生成对应的执行计划。 4、Mysql根据优化器生成的执行计划,调用存储引擎的API来执行查询; 5、将结果放一份到缓存中,同时返回一份给客户端。 sql执行最大的瓶颈在于磁盘的IO,即数据的读取;不同sql的语法,会造成不同执行计划的执行,而不同的执行计划在IO上面临完全不一样的数量级,从而造成性能的差距。 sql的优化实质是让mysql中的查询优化器选择一个符合我们SQL计划的执行方案,即让查询优化器按照开发人员的想法做事。 why? 查询执行计划的执行会导致IO,不同的查询执行计划会导致不同的IO次数,从而导致性能的差异。查询执行计划设计得好,IO次数就少,此时的sql性能就更好。

mysql优化-面试题

匿名 (未验证) 提交于 2019-12-02 22:02:20
第一方面:30种mysql优化sql语句查询的方法 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。    2. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。    3. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num is null   可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:   select id from t where num=0    4. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:   select id from t where num=10 or num=20   可以这样查询:   select id from t where num=10   union all   select id from t where num=20    5. 下面的查询也将导致全表扫描:   select id from t where name like '%abc%'   若要提高效率,可以考虑全文检索。    6. in 和 not in 也要慎用

mysql自动备份软件 1.0 绿色版

匿名 (未验证) 提交于 2019-12-02 22:02:20
mysql自动备份工具 是一款能够为mysql用户打造的自动备份软件。mysql自动备份工具界面简洁,操作简单,用户设定好相应数据后就能自动备份mysql中的数据了,是一款非常实用的小工具,有需要的朋友欢迎来jz5u下载软件。 目前本软件功能单一只支持自动定时备份指定my sql数据库,意思就是说只可以单机使用!备份文件也与sql在同一台机器上,很多服务器管理员需要用到这类的软件哦!可以置备份目录、可以设置备份文件、可以设置时间等等…… (命令在DOS的\mysql\bin目录下执行) mysqldump --opt school>school.bbb 注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。 自动备份 mysql 数据库的方法 1、先是建立批处理文件,将以下代码另存为。bat文件,文件名最好为英文。注意下面的路径,以笔者自己的数据库为例,数据库安装在D盘下mysql\mysql下,备份位置在F:\beifen,后面的代码是日期。 @echo off[9] color 0D MODE con: COLS=71 LINES=25 title mysql数据库自动备份脚本(任务计划) set sou_dir="D:\mysql\Mysql\data" set obj_dir=F:\beifen\

MYSQL双主模式,触发器(trigger)不可见问题

匿名 (未验证) 提交于 2019-12-02 22:02:20
MYSQL版本信息: Your MySQL connection id is 71851 Server version : 5.7 . 24 - log MySQL Community Server ( GPL ) 昨晚解决一个紧急问题,计划用MYSQL的触发器简单做两表的数据同步。 单机模式创建的触发器(trigger)可正常看到,在双主模式下执行SQL命令创建的触发器在Navicat下看不到,但是用show trigger可以看到。 在双主模式下,函数在Navicat下也是存在一些问题。 关于双主模式下trigger的详细描述 https://dev.mysql.com/doc/refman/5.7/en/replication-features-triggers.html 转载请标明出处: MYSQL双主模式,触发器(trigger)不可见问题 文章来源: MYSQL双主模式,触发器(trigger)不可见问题