mysql执行计划

MySQL入门(三)

十年热恋 提交于 2019-12-30 00:13:20
1. MySQL 优化 - 查看执行记录 MySQL 提供了一个 EXPLAIN 命令 , 它可以 对 SELECT 语句进行分析 , 并输出 SELECT 执行的详细信息 , 以供开发人员针对性优化。 使用 explain 这个命令来查看一个这些 SQL 语句的执行计划,查看该 SQL 语句有没有使用上了索引,有没有做全表扫描,这都可以通过 explain 命令来查看。 EXPLAIN 命令用法十分简单 , 在 SELECT 语句前加上 explain 就可以了 , 例如 : 1.1 SQL 语句优化 -explain 分析问题 expain 出来的信息有 10 列,分别是 id 、 select_type 、 table 、 type 、 possible_keys 、 key 、 key_len 、 ref 、 rows 、 Extra , 下面对这些字段进行解释: id: select 查询的标识符 . 每个 select 都会自动分配一个唯一的标识符 . select_type: 表示查询的类型。 table: 输出结果集的表 type: 表示表的连接类型 possible_keys: 表示查询时,可能使用的索引 key: 表示实际使用的索引 key_len: 索引字段的长度 ref: 哪个字段或常数与 key 一起被使用 rows: 扫描出的行数 ( 估算的行数 )

MySQL 语句优化 explain执行计划详解

…衆ロ難τιáo~ 提交于 2019-12-28 13:17:21
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。 explain执行计划包含的信息 其中最重要的字段为:id、type、key、rows、Extra 各字段详解 id select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序 三种情况: 1、id相同:执行顺序由上至下 2、id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 3、id相同又不同(两种情况同时存在):id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行 select_type 查询的类型,主要是用于区分普通查询、联合查询、子查询等复杂的查询 1、SIMPLE:简单的select查询,查询中不包含子查询或者union 2、PRIMARY:查询中包含任何复杂的子部分,最外层查询则被标记为primary 3、SUBQUERY:在select 或 where列表中包含了子查询 4、DERIVED:在from列表中包含的子查询被标记为derived(衍生),mysql或递归执行这些子查询,把结果放在零时表里 5、UNION:若第二个select出现在union之后,则被标记为union;若union包含在from子句的子查询中

MySQL索引(详细解释)

女生的网名这么多〃 提交于 2019-12-26 22:57:21
什么是索引 索引是一种 可以加快检索的数据结构 ,它 包含从表或者视图的一列或者多列生成的键 ,以及 映射到指定数据存储位置的指针 。 我们可以把数据库看成一本书,索引就是书的目录,借助目录查找信息,显然要比没有目录的书查起来要方便快捷。 索引的作用就是提高查询效率 那么索引能提高查询效率,我们就要创建很多索引么? 不是的,索引最终是存储在硬盘上的,索引越多,那么存储索引的文件就会越大,电脑在使用索引的时候,是先将索引文件加载到内存上,然后再加载到CPU上。所以,索引如果过多,会加重内存和磁盘的交互负担。 并且,数据的改动也会对索引造成影响。 总结:索引可以提高查询效率,但并不是越多越好,过多的索引会引起磁盘I/O的交互频繁,并且数据改动,索引也会受到影响。 索引分类 普通索引 :没有任何条件现制,可以给任意字段添加普通索引。 Student表中的字段有SID,Sname,Sage,Ssex, 对其中任意的一个字段都可以创建索引,没有任何现制,这就是普通索引 唯一性索引 :唯一性索引顾名思义,它可以保证索引中的所有的值都是唯一的,使得表中的每一行在某种方式上都具备唯一性。所以, 只有当唯一性是数据本身的特征的时候,指定唯一性索引才有意义。 例如:主键,在表中是不能重复的,主键索引,就是唯一性索引。 SID就是Student表的主键,SID是不会重复的字段,也就是唯一性字段

mysql 监控及优化——转载自http://www.cnblogs.com/suansuan/

孤者浪人 提交于 2019-12-26 08:14:43
1、Mysql连接数   Mysql默认最大连接数为100。   设置Mysql的最大连接数,在Mysql的配置文件中增加:   max_connections = 1000               #Mysql的最大连接数,默认如果不写的话是100个   wait_timeout = 10               #超时时间   配置文件路径:    (/etc/my.cnf 系统自带) (/opt/lampp/etc/my.cnf 安装Mysql 路径)   查看当前有多少个连接   show status like '%Threads_connected%';  #查看当前连接数   show processlist;            #也可查看锁表 2、Mysql缓存   Query Cache缓存的是sql语句对应的结果集,InnoDB_Buffer_Pool中缓存的是表中的数据。Buffer_Pool是设置的越大越好,一般设置为服务器物理内存的70%。   缓存1(MySQL层):查询缓存 Query Cache     ①.查询表里的数据有变化,之前的缓存失效。     ②.查询语句必须一模一样,才能用查询缓存;只要字符大小写或者注释等有一点点不同,都不可以用查询缓存。     ③.任何一个包含不确定的函数(比如now(),current_date()

Mysql 索引

偶尔善良 提交于 2019-12-26 00:25:49
原文: mysql索引详解 一. 索引的定义    索引用于快速找出在某个列中有一特定值的行   不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,   如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。   MySQL中的索引的 存储类型 有两种: B+TREE 、 HASH 。 二. 优缺点 1. 优点 所有的MySql列类型(字段类型)都可以被索引,也就是可以给 任意字段设置索引 提高数据的 查询速度 2. 缺点 创建索引和维护索引要 耗费时间 ,并且随着数据量的增加所耗费的时间也会增加 索引也需要 占用空间 ,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值 当对表中的数据进行增加、删除、修改时,索引也需要 动态维护 ,降低了数据的维护速度。 3. 使用原则 对 经常更新的表 就 减少索引 的设置,对 经常用于查询的字段 应该 创建索引 , 数据量小 的表最好 不要使用索引 ,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。 在 相同值多 的列上(字段上) 不要建立索引 ,比如在学生表的"性别"字段上只有男,女两个不同值。相反的

一个MySQL视图的优化过程

人走茶凉 提交于 2019-12-25 13:04:58
1. 需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程。问题就是下面这个家伙: create or replace view view_task_meter_info as select t1.TASK_ID,t1.task_no,t1.BINDBOX_BARCODE as box_barcode,t1.EQUIP_BAR_CODE,t1.METER_STATUS,t1.ENTITY_TYPE as RSLT_CODE, -- 设备类别 (SELECT name from data_dictionary_info t01 where t01.domain ='设备类别' and t01.code = t3.EQUIP_CATEG) as T_Equip_categ, -- 类别 (select name from data_dictionary_info t09 where t09.domain = '类型' and t09.code = t3.TYPE_CODE) as T_TYPE_CODE, -- 类型 (select name from data_dictionary_info t09 where t09.domain = '类别' and t09.code = t3

mysql技术索引--(mysql学习二)

偶尔善良 提交于 2019-12-25 11:56:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 索引类型: 普通类型索引 primary key foreign key unique index non-unique 专业索引: --b-tree 平衡数索引,有别于二叉树.二叉树高度可能很高平衡树不会很高一般3、4层. b+tree b-tree是逻辑叫法,b+tree是技术实现.有一部分存储在内存不够时会放到磁盘上.(innodb、MyISAM、Memery等) r-tree 空间索引(MyISAM) full text全文索引.(MyISAM) hash index(Memery) 索引目的: 减少I/O,会提供查询速度,会影响dml速度. 选择性:返回行占整个记录的比例 索引类型:前缀索引、复合索引、函数索引的变通(通过增加列和触发器实现)、全文索引 复合索引:oracle有index skip算法可以使不是引导列的索引被使用.mysql必须按照定义顺序使用复合索引. 全文索引:主要是查询单词. ...where match(列) aginst('字符' in 模式).有3中模式boolean(支持运算符表达式)、自然语言、扩展自然语言. select title from books where mathc(title) against('prince') select title,author

MySQL数据库备份

蹲街弑〆低调 提交于 2019-12-25 00:58:34
目录 1.使用mysqldump实现逻辑备份 2.恢复逻辑备份 3.备份/恢复案例 4.实现自动化备份 5.表的导出和导入 6.数据库迁移 # 1. 物理备份: 直接复制数据库文件,适用于大型数据库环境。但不能恢复到异构系统中如Windows。 # 2. 逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 # 3. 导出表: 将表导入到文本文件中。 1.使用mysqldump实现逻辑备份 # 语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql # 示例: # 单库备份 mysqldump -uroot -p123 db1 > db1.sql mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql # 多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql # 备份所有库 mysqldump -uroot -p123 --all-databases > all.sql 2.恢复逻辑备份 # 方法一: [root@localhost backup]# mysql -uroot -p123 < /backup/all

java高级面试题总结

青春壹個敷衍的年華 提交于 2019-12-24 05:10:44
目录 1、java基础 1.1、hashmap原理?扩容 1.2、arraylist原理?扩容 1.3、jdk1.8新特性? 1.4、completablefuture 2、数据库 2.1、mysql索引优化 2.2、创建索引的依据? 2.3、mysql执行计划,explain各项参数代表什么意思? 2.4、什么时候不会用到索引? 2.5、mysql存储引擎 2.6、数据库隔离级别 2.7、为什么要使用索引 3、java多线程 3.1、java并发包java.util.concurrent及其子包都包括什么? 3.2、synconsized和volatile关键字区别? 3.3、实现线程池的方式? 3.4、公平锁与非公平锁 3.5、为什么不适用Excutors来创建线程池 3.6、ReentraneLock & AQS 4、jvm、java内存模型 4.1、jvm内存模型? 4.2、jvm调优具体调的那些参数? 5、java框架(spring boot,sprint cloud) 5.1、mybatis一级缓存,二级缓存 5.2、mybatis $ # 区别? 5.3、sprint cloud 的常用组件? 6、中间件 6.1、redis存储的数据类型 6.2、redis实现分布式锁原理,使用redis实现分布式锁有什么问题? 6.3、zookeeper实现分布式锁原理 6.4

PDO防sql注入原理分析

感情迁移 提交于 2019-12-24 03:13:27
使用pdo的预处理方式可以避免sql注入。 在php手册中'PDO--预处理语句与存储过程'下的说明: 很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。 当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周 期。简言之, 预处理语句占用更少的资源,因而运行得更快。 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。 如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。 (然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。 预处理语句如此有用,以至于它们唯一的特性是在驱动程序不支持的时PDO 将模拟处理。这样可以确保不管数据库是否具有这样的功能,都可以确保应用程序可以用相同的数据访问模式。 下边分别说明一下上述两点好处: 1.首先说说mysql的存储过程,mysql5中引入了存储过程特性,存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行