sql优化

引擎介绍

◇◆丶佛笑我妖孽 提交于 2020-02-05 09:11:24
mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。 选择如何存储和检索你的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其它 数据库系统 (包括大多数商业选择)仅支持一种类型的 数据存储 。 遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了 mysql支持哪些存储引擎?   mysql5

数据库存储引擎

假如想象 提交于 2020-02-05 07:28:21
mysql存储引擎概述 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 一种类型表明的是一种存储方式 存储引擎:就是表的类型,不同的类型就会对应不同的处理机制去处理他 事务:就是要么同时成功,要么同时不成功 mysql支持哪些存储引擎? mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。 其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 各种存储引擎的特性 InnoDB MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB

数据库 -- 存储引擎介绍

孤人 提交于 2020-02-05 06:13:48
mysql引擎介绍 1,概念   mysql5.6支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。 mysql支持的存储引擎 MySQL服务器采用了多层设计和独立模块,插件式存储引擎体系结构,允许将存储引擎加载到正在运新的MySQL服务器中,图中的Pluggable Storage Engines部分。采用MySQL服务器体系结构,由于在存储级别上(也就是Pluggable Storage Engines)提供了一致和简单的应用模型和API,应用程序编程人员和DBA可不再考虑所有的底层实施细节。因此,尽管不同的存储引擎具有不同的能力,应用程序是与之分离的。存储引擎就司职与文件系统打交道了。 并发性:某些应用程序比其他应用程序具有很多的颗粒级锁定要求(如行级锁定)。 事务支持:并非所有的应用程序都需要事务,但对的确需要事务的应用程序来说,有着定义良好的需求,如ACID兼容等。 引用完整性:通过DDL定义的外键,服务器需要强制保持关联数据库的引用完整性。 物理存储:它包括各种各样的事项,从表和索引的总的页大小,到存储数据所需的格式,到物理磁盘。 索引支持

performance_test learning syllabus

六月ゝ 毕业季﹏ 提交于 2020-02-05 02:49:52
performance_test learning syllabus 背景 为什么要做性能测试 性能测试与功能测试的区别 相关术语(概念) 响应时间 并发用户数 TPS(Transaction Per Second) 性能测试学习大纲 一、操作系统篇 二、通信网络及协议 三、Linux重要基础命令 四、Web服务及中间件 五、MySQL数据库 六、NoSQL数据库Redis 七、性能理论和工具 八、接口测试篇(基础+高级) 九、JVM调优 十、TCP原理 十一、监控分析调优 十二、网站架构 背景 性能测试作为测试行业中一块较具技术含量的领域,许多人学习时无从下手。为方便新手更好的接触性能测试,本人网上收集了一些资料并结合本人的一些经验来帮助大家更好的学习性能测试。 为什么要做性能测试 1)目前绝大多数应用都是基于网络的分布式应用,我们无法知道用户数量,用户场景的不确定性,系统测试时,不仅仅是功能,业务逻辑,接口测试,还要测试系统性能。一个用户没问题,但是用户一旦多了就可能出现各种各样的问题,所以需要进行系统性能测试。 2)用户数量增加,系统负债增加,进行系统性能测试,知道系统承受的并发用户数量,带宽是否够用,cpu是否够用,内存是否够用,硬盘速度是否跟得上。从服务端来看,测试服务器是否能承载用户多并发,系统是否稳定,从用户角度看响应时间速度。 性能测试与功能测试的区别 功能测试:

Mysql 索引

好久不见. 提交于 2020-02-05 02:07:38
一. 存储引擎 1. 什么是存储引擎? 与其他数据库例如Oracle 和SQL Server等数据库中只有一种存储引擎不同的是,MySQL有一个被称为“Pluggable Storage Engine Architecture”(可替换存储引擎架构)的特性,也就意味着MySQL数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。MySQL数据库在实际的工作中其实分为了语句分析层和存储引擎层,其中语句分析层就主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,而存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作。简而言之,就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 2. 存储引擎种类 存储引擎 说明 MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务 InnoDB 5.5版本后MySQL的默认数据库,支持事务和行级锁定,比MyISAM处理速度稍慢 ISAM MyISAM的前身,MySQL5.0以后不再默认安装 MRG_MyISAM(MERGE) 将多个表联合成一个表使用,在超大规模数据存储时很有用 Memory 内存存储引擎

mysql语句优化原则

我与影子孤独终老i 提交于 2020-02-04 18:12:59
有时候发现数据量大的时候查询起来效率就比较慢了,学习一下mysql语句优化的原则,自己在正常写sql的时候还没注意到这些,先记录下来,慢慢一点一点的学,加油! 这几篇博客写的都可以: https://blog.csdn.net/s1547823103/article/details/79205670 https://blog.csdn.net/u011277123/article/details/78904569 使用索引的原则: 1.最左前缀匹配原则。 mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配。所以要尽量把“=”条件放在前面,把这些条件放在最后。 不会用到b的索引: where a=1 and c>0 and b=2 会用到b的索引: where a=1 and b=2 and c>0 2.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少。 3.当取出的数据超过全表数据的20%时,不会使用索引。 4.使用like时注意: 不使用索引: like ‘%L%’ 使用索引: like ‘L%’ 5.尽量将or 转换为 union all 不使用索引: select * from user where name=’a’ or age=’20

性能优化-索引优化SQL的方法

拥有回忆 提交于 2020-02-04 11:27:33
4、索引优化SQL的方法 1、索引的维护及优化(重复及冗余索引) 增加索引会有利于查询效率,但会降低insert,update,delete的效率,但实际上往往不是这样的,过多的索引会不但会影响使用效率,同时会影响查询效率,这是由于数据库进行查询分析时,首先要选择使用哪一个索引进行查询,如果索引过多,分析过程就会越慢,这样同样的减少查询的效率,因此我们要知道如何增加,有时候要知道维护和删除不需要的索引 2、如何找到重复和冗余的索引 重复索引: 重复索引是指相同的列以相同的顺序建立的同类型的索引,如下表中的 primary key和ID列上的索引就是重复索引 create table test( id int not null primary key, name varchar(10) not null, title varchar(50) not null, unique(id) )engine=innodb; 冗余索引: 冗余索引是指多个索引的前缀列相同,或是在联合索引中包含了主键的索引,下面这个例子中key(name,id)就是一个冗余索引。 create table test( id int not null primary key, name varchar(10) not null, title varchar(50) not null, key(name,id)

29_MySQL读写分离 MySQL多实例 、MySQL性能调优

天大地大妈咪最大 提交于 2020-02-04 02:18:18
版本:5.7.28 mysql51:192.168.4.51 主 mysql52:192.168.4.52 从 mysql50:192.168.4.50 客户机 1.实现MySQL读写分离 搭建一主一从结构 配置maxscale代理服务器 测试分离配置 1.1 搭建一主一从结构 192.168.4.51 主 192.168.4.52 从 测试OK 1.2 实现mysql读写分离 1.2.1 配置数据读写分离服务器:192.168.4.50 ]# wget https://downloads.mariadb.com/MaxScale/2.1.2/rhel/7/x86_64/maxscale-2.1.2-1.rhel.7.x86_64.rpm ]# yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm 1.2.2 配置maxscale ]# vim /etc/maxscale.cnf [maxscale] threads=auto //运行的线程的数量 [server1] //定义数据库服务器 type=server address=192.168.4.51 //数据库服务器的ip port=3306 protocol=MySQLBackend //后端数据库 [server2] type=server address=192.168.4

一次SQL查询优化原理分析(900W+数据,从17s到300ms)

折月煮酒 提交于 2020-02-03 19:36:11
作者:Muscleape https://www.jianshu.com/p/0768ebc4e28d 有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方式调整SQL后,耗时347 ms (execution: 163 ms, fetching: 184 ms); 操作: 查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段; 原理: 减少回表操作; -- 优化前SQL SELECT 各种字段 FROM `table_name` WHERE 各种条件 LIMIT 0,10; -- 优化后SQL SELECT 各种字段 FROM `table_name` main_tale RIGHT JOIN ( SELECT 子查询只查主键 FROM `table_name` WHERE 各种条件 LIMIT 0,10; ) temp_table ON temp_table.主键 = main_table.主键 一,前言 首先说明一下MySQL的版本: mysql> select version(); +-----------+ | version() | +-----------+

MySQL学习笔记(13)--预处理

只愿长相守 提交于 2020-02-03 17:42:03
·概念 prepare statement,一种预先编译SQL指令的方式 (然后命令执行) 预处理不同于直接处理,是将要执行的SQL指令先发送给服务器编译,然后通过指令执行 ●发送预处理: prepare 预处理名字 from '要执行的SQL指令' ●执行预处理: execute 预处理名字 预处理管理 ●预处理属于 会话级别 :即当前用户当次连接有效 (断开会被服务器清理掉) ●删除预处理: deallocate / drop 预处理名字 示例 #普通操作 select * from my_stuent ; #预处理操作:发送预处理 prepare p1 from 'select * from my_stuent' ; #预处理操作:执行预处理 execute p1 ; #删除预处理 deallocate prepare p1 ; ·作用 性能优化 效率优化 :同样的SQL不用每次都进行编译(编择耗时) 普通处理:每次都需要编译 预处理:编译一次 网络传输优化 :复杂的SQL指令只需要传输一-次 普通处理:每次都需要网络传输SQL指令 预处理:传输一次SQL指令,以后都是执行指令 安全:有效防止SQL注入(外部通过数据的特殊使用使得SQL的执行方式改变) 普通处理:直接发送给服务器执行(容易出现SQL注入) 预处理:发送的是结构,数据是后期执行传入(传入协议不一样,数据安全性高