mysql执行计划

MYSQL面试题2

﹥>﹥吖頭↗ 提交于 2019-11-27 05:30:58
1、MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 1. 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 2. 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 3. 从:sql执行线程——执行relay log中的语句; 2、MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别 char是一种固定长度的类型

[MySql]explain用法及实践【2】

╄→尐↘猪︶ㄣ 提交于 2019-11-27 04:56:07
摘要: 写在前面 explain对我们优化sql语句是非常有帮助的。可以通过explain+sql语句的方式分析当前sql语句。 例子 EXPLAIN SELECT dt,method,url FROM app_log WHERE id=11789 table 显示这一行数据属于哪张表,若在查询中为select起了别名,则显示别名。 写在前面 explain对我们优化sql语句是非常有帮助的。可以通过explain+sql语句的方式分析当前sql语句。 例子 EXPLAIN SELECT dt,method,url FROM app_log WHERE id=11789 table 显示这一行数据属于哪张表,若在查询中为select起了别名,则显示别名。 EXPLAIN SELECT dt,method,url FROM app_log AS temp WHERE id=11789 type 在表里查到结果所用的方式。包括(性能有差——>高): All | index | range | ref | eq_ref | const,system | null | all:全表扫描,MySQL 从头到尾扫描整张表查找行。 EXPLAIN SELECT dt,method,url FROM app_log AS temp LIMIT 100 注意

索引相关

旧时模样 提交于 2019-11-27 03:38:36
索引 为社么要使用索引 避免全表扫描,快速查询数据 数据库中有什么信息可以成为索引 主键、唯一键及普通键等 索引的数据结构 生成索引,建立二叉查找树进行二分查找 生成索引,建立B-Tree结构进行查找 生成索引,按照B+-Tree结构进行查找 Mysql索引 生成索引,按照Hash结构进行查找 普通的二叉查找树会被深度限制搜索速度,深度增加1,就多进行一次IO。 B+Tree,Hash,BitMap MySQL不支持BitMap,且支持InnoDB和MYISAM的 MySQL不显式支持Hash B-Tree ​ 根节点至少包含两个孩子,根节点的孩子数为m ​ 树中每个节点最多含有m个孩子(m大于等于2) ​ 除了根节点和叶子节点外,其他每个节点至少含有ceil个节点(m/2向上取整) ​ 所有叶子节点都位于同一层 ​ 假设每个非终端节点中包含n个关键字信息,其中: ​ a: Ki 为关键字,关键字按升序排列,Ki<K(i-1) ​ b: 关键字个数n,:ceil<=n<=m-1 ​ c: 非叶子节点的指针:p[1],p[2],….p[m],其中p[1]指向关键字小于K[1]的子树,p[m]指向关键字大于K[m-1]的子树,其他p[i],指向关键字属于(K[i-1],K[i])的子树 B+ Tree 非叶子节点的子树指针与关键字个数相同 非叶子节点的子树指针P[i],

【MySQL】索引相关

时间秒杀一切 提交于 2019-11-27 02:50:09
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并:

【MySQL】索引相关

假装没事ソ 提交于 2019-11-27 02:49:59
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并:

一份详细的 MySQL 规范

会有一股神秘感。 提交于 2019-11-27 02:24:30
一、数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索 引失效,导致查询效率降低) 二、数据库基本设计规范 1、所有表必须使用Innodb存储引擎 没有特殊要求(即Innodb无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用Innodb存储引擎(mysql5.5之前默认使用Myisam,5.6以后默认的为Innodb)Innodb 支持事务,支持行级锁,更好的恢复性,高并发下性能更好 2、数据库和表的字符集统一使用UTF8 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效 3、所有表和字段都需要添加注释 使用comment从句添加表和列的备注 从一开始就进行数据字典的维护 4、尽量控制单表数据量的大小,建议控制在500万以内 500万并不是MySQL数据库的限制,过大会造成修改表结构,备份,恢复都会有很大的问题

mysql 查询执行的流程

ⅰ亾dé卋堺 提交于 2019-11-27 01:09:09
1、客户端发送一个请求给服务器。 2、服务器先检查查询缓存,命中了缓存,直接返回缓存中的数据,否则进入下一个阶段。 3、服务器进行sql解析,预处理,再由优化器生成对应的执行计划。 4、mysql根据执行计划,调用存储引擎的API来执行查询 5、将结果返回给客户端。 转载于:https://www.cnblogs.com/nzbbody/p/4542187.html 来源: https://blog.csdn.net/weixin_30872499/article/details/99234854

信安周报-第02周:SQL基础

霸气de小男生 提交于 2019-11-27 00:44:47
信安之路 第02周 Code: https://github.com/lotapp/BaseCode/tree/master/safe 前言 本周需要自行研究学习的任务贴一下: 1.概念(推荐) 数据库系列去年就开始陆陆续续的发文,这周任务简单带过,概念部分我更新了一下,其他部分看扩展吧~ 1.1.关系型数据库 引用百科的一段 抽象 描述: “关系型数据库,是指 采用了关系模型 来组织数据的数据库,其 以行和列的形式存储数据 ,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。” 通俗讲就是: 现实中的东西抽象成一个个关系,然后存储在一张张行列组成的表中,这些表就组成了关系型数据库 PS:重点就是各数据之间的 关系 (Join) 1.1.1.代表 最经典的莫过于: MySQL 、 SQLServer 、 PostgreSQL 、 SQLite 、 Oracle 1.1.2.特性 先看看传统数据库的好处: 通过事务保持数据一致 可以Join等复杂查询 社区完善(遇到问题简单搜下就ok了) 最典型的特征就是: 事物的ACID特性 PS:抽象的就不说了,举个例子来说明 ACID : A

mysql 执行计划的理解

江枫思渺然 提交于 2019-11-27 00:44:46
1、执行计划就是在sql语句之前加上explain,使用desc 也可以。 2、desc有两个选项extended和partitions,desc extended 将原sql语句进行优化,通过show warnings 可以看到优化后的sql语句。 desc partitions 可以查看使用分区表的信息。 3、比如: mysql> desc select * from student; +----+-------------+---------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | student | ALL | NULL | NULL | NULL | NULL | 5 | | +----+-------------+---------+------+---------------+------+---

mysql 占用的内存大小

白昼怎懂夜的黑 提交于 2019-11-27 00:44:15
1、mysql执行查询计划,key_len表示索引使用的字节数,这个字节数和三个条件有关。 mysql> create table t1(v1 char(10)); Query OK, 0 rows affected mysql> create index index_v1 on t1(v1); Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 2、是否允许为null,允许为null 会多一个字节,标识取值是否为NULL。如下: mysql> alter table t1 modify column v1 char(10) not null; Query OK, 0 rows affected Records: 0 Duplicates: 0 Warnings: 0 mysql> desc select * from t1; +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +--