mysql创建索引

[MySQL]Query的性能优化分析(二)

北慕城南 提交于 2020-01-30 04:33:24
MySQL Query Optimizer MySQL Query Optimizer是MySQL中专门负责优化SELECT语句的模块,其主要功能是:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供MySQL认为最优的执行计划 1 。 优化器执行过程: 客户端向MySQL发起Query请求; 命令解析器模块完成请求分类,区别出SELECT并转发给MySQL Query Optimizer(查询优化器); 查询优化器对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值; 查询优化器对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等; 分析Query中是否有Hint消息,是否可以通过Hint信息完全确定该Query的执行计划; 若没有Hint信息或不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析,得出最后的执行计划。 查看执行计划:Explain Explain的作用 使用EXPLAIN关键字可以通过模拟优化器执行SQL查询语句了解MySQL是如何处理SQL语句,从而分析查询语句或是表结构中的性能瓶颈。 使用Explain可以了解到: 表的读取顺序:通过执行计划中的id判断 数据读取操作的操作类型:通过执行计划中的select_type判断 哪些索引可以使用

MongoDB 2.2索引

末鹿安然 提交于 2020-01-30 01:23:46
在mysql中已经学习了索引,并知道索引对于查询速度的提升 mongodb也支持索引,以提升查询速度 步骤一:创建大量数据 执行如下代码,向集合中插入10万条文档 for(i=0;i<100000;i++) { db.t1.insert({name:'test'+i, age:i}) } 步骤二:数据查找性能分析 查找姓名为'test10000'的文档 db.t1.find({name:'test10000'}) 使用explain()命令进行查询性能分析 db.t1.find({name:'test10000'}).explain('executionStats') 其中executionStats下的executionTimeMillis表示整体查询时间,单位是毫秒 性能分析结果如下图: 步骤三:建立索引 创建索引 1表示升序,-1表示降序 db.集合.ensureIndex({属性:1}) db.t1.ensureIndex({name:1}) 步骤四:对索引属性查询 执行上面的同样的查询,并进行查询性能分析 db.t1.find({name:'test10000'}).explain('executionStats') 性能分析结果如下图: 索引的命令 建立唯一索引,实现唯一约束的功能 db.t1.ensureIndex({'name':1}, {'unique':true

sql语句进阶教程

允我心安 提交于 2020-01-30 00:39:01
转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下思路,以备日后复习之用。 PS:本文适用SQL Server2008语法。 一、关系型数据库和SQL 实际上准确的讲,SQL是一门语言,而不是一个数据库。 什么是SQL呢?简而言之,SQL就是维护和使用关系型数据库中的的数据的一种标准的计算机语言。 1.1 SQL语言主要有3个主要的组成部分。 DML(Data Manipulation Language)数据操纵语言。这个模块可以让我们检索、修改、增加、删除数据库中的数据。 DDL(Data Definition Language)数据定义语言。是的我们能够创建和修改数据库本身。如:DDL提供 ALTER 语句,他让我们可以修改数据库中表的设计。 DCL(Data Control Language)数据控制语言,用于维护数据库的安全。 在SQL术语中,记录(record)和字段(field)实际上就称为行(row)和列(column)。 1.2 主键和外键 主键之所以有必要: 首先使你唯一标识表中单独的一行。主键确保了唯一性。 可以很容易的将一个表和另一个表关联。 主键一般就会自动默认创建索引,提高了查询速度。

115资源苹果手机怎么找

只谈情不闲聊 提交于 2020-01-29 00:23:51
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态。 也可以通过Prometheus、Grafana等监控工具观察系统状态。(感兴趣的可以翻看我之前的文章)640?wx_fmt=png SQL语句表象 冗长 执行时间过长 从全表扫描获取数据 执行计划中的rows、cost很大 冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高。更进一步判断SQL问题就得从执行计划入手,如下所示:640?wx_fmt=png 执行计划告诉我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判断这是一段"有味道"的SQL。 获取问题SQL 不同数据库有不同的获取方法,以下为目前主流数据库的慢查询SQL获取工具 MySQL 慢查询日志 测试工具loadrunner Percona公司的ptquery等工具 Oracle AWR报告 测试工具loadrunner等 相关内部视图如v$、$session

Hive学习笔记--基本操作2

≯℡__Kan透↙ 提交于 2020-01-28 04:51:52
Hive的Join连接: HiveQL 也支持inner join、left join ,right join,full outer join(全外连接),left semi join(左半连接);、 left semi join是一种更高效子查询的实现。 例如:select * from product_t left semi join order_t on product_t.pid=order_t.pid; 查询的是product_t中的数据在order_t_pid中出现过的(查询的结果是prduct_t的元素) SerDe: 是Hive 提供用于进行序列化和但序列化的机制 针对不同规则的数据利用表达式进行处理 在处理的时候,每一个字段对应一个捕获组。 语句: create table log(ip string,time string,timezone way string,resource string,protocal string…) 、 row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe’ with serdeproperties ( “input.regex”="(. ) -- \[(. ) (. )\] "(. ) (. ) (. )" (.*) -") stored as textfile;

Mysql优化

帅比萌擦擦* 提交于 2020-01-28 04:42:12
一、Mysql的逻辑架构 二、存储引擎 Mysql5.5之前,默认存储引擎是MyISAM,5.5之后默认存储引擎变成 InnoDB 。 MyISAM和InnoDB的区别: 1)MyISAM不支持事务、InnoDB支持事务 2)MyISAM只有表锁、InnoDB引入了行锁 3)MyISAM支持全文索引、InnoDB 5.5不支持,5.6以后支持 4)MyISAM的读写速度会优于InnoDB 三、MySQL优化(SQL优化) · 数据类型的优化(创建表的时候,选择合适的数据类型) · 索引优化(SQL优化成本最低并且最有效果的优化方式) · 查询优化(SQL自带的检测工具、SQL结构) · 库表结构优化(分库分表、读写分离) · 硬件优化(cpu、固态硬盘、内存) · 参数优化(系统运行参数)- DBA 四、数据类型的优化 数据类型的选择原则: · 选择最小的数据类型,同时需要保证能够放下所存储的数据 · 选择最合适的数据类型,比如使用int表示年龄,而是不是varchar表示年龄 · 尽量让需要添加索引的列为not null 五、索引优化 什么是索引? 索引是一本书的目录,可以快速找到相应的内容。 索引是一个帮助我们快速查询内容的 数据结构 。   无索引的查询方式: 有索引的查询方式: 索引失效: 当写了一个索引后,开发者认为执行的sql会用上该索引

数据库MySQL-InnoDB参数配置

佐手、 提交于 2020-01-28 03:03:23
3、配置InnoDB的几个变量 1、innodb_buffer_pool_size 对于InnoDB表来说, innodb_buffer_pool_size 的作用就相当于key_buffer_size对于MyISAM表的作用一样。InnoDB使用该参数指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。 根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)。 show status like 'innodb%'; 2、innodb_flush_log_at_trx_commit 主要控制了innodb将log buffer中的数据写入日志文件并flush磁盘的时间点,取值分别为0、1、2三个。0,表示当事务提交时,不做日志写入操作,而是每秒钟将log buffer中的数据写入日志文件并flush磁盘一次;1,则在每秒钟或是每次事物的提交都会引起日志文件写入、flush磁盘的操作,确保了事务的ACID;设置为2,每次事务提交引起写入日志文件的动作,但每秒钟完成一次flush磁盘操作。 实际测试发现,该值对插入数据的速度影响非常大,设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。因此,MySQL手册也建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。 根据MySQL手册

MSQL语句优化总结

六眼飞鱼酱① 提交于 2020-01-28 02:26:22
MYSQL语句优化总结 在实际项目中,数据量存储与读取是不可或缺的工作。读取数据不单单是把数据取出来就完事了,在数据量特别大的情况下,如何提高读取效率是一件很重要的事情.要想提高读取效率就要了解sql优化方案,小编在此对sql语句优化做了一个简单的总结,供大家学习交流。如有不对的地方,恳请各位看官指正 一在不使用索引的情况下sql语句优化 1.select语句中尽量避免使用* *是获取表中全部字段的意思,比如select * from student,获取的是student表中全部字段的所有数据 优化思路: 比如我只需要这个表中姓名和成绩两个字段的数据,sql语句可以改成select name,achievement from student 补充:如果select * 用户连表查询,会占用更大的数据库服务器资源 2.select 语句中尽量避免使用in 和 not in in和not in会导致数据库进行全表搜索,提高运行时间成本,可以使用between and代替 如:我想查询学号为1,和10的学生姓名和成绩 select name, achievement from student where stuno in(1,10); 优化: Select name,achievement fron student where stuno between 1 and 10; 3

MySQL 索引深入剖析

点点圈 提交于 2020-01-27 19:02:41
1. 索引是什么? 1.1. 索引是什么 一张表有 500 万条数据,在没有索引的 name 字段上执行一条 where 查询: select * from user_innodb where name = ' 青山 ' ; 如果 name 字段上面有索引呢?在 name 字段上面创建一个索引,再来执行一下相 同的查询。 ALTER TABLE user_innodb DROP INDEX idx_name; ALTER TABLE user_innodb ADD INDEX idx_name (name); 有索引的查询和没有索引的查询相比,效率相差几十倍。 通过这个案例大家应该可以非常直观地感受到,索引对于数据检索的性能改善是非 常大的。 那么索引到底是什么呢?为什么可以对我们的查询产生这么大的影响?创建索引的 时候发生了什么事情? 1.1.1.索引定义 维基百科对数据库索引的定义: 数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询、更新数据库表中数据。 数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有 索引的话,我们要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据, 直到找到这条数据。 但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种 特殊的专门用来快速检索的数据结构

MySQL 事务与锁详解

吃可爱长大的小学妹 提交于 2020-01-27 17:15:22
1 什么是数据库的事务? 1.1 事务的典型场景 比如下单,会操作订单表,资金表,物流表等等,这个时候我们需要让这些操作都 在一个事务里面完成。在金融的系统里面事务配置是很常见的,比如行内转账的这种操 作,如果我们把它简单地理解为一个账户的余额增加,另一个账户的余额减少的情况(当 然实际上要比这复杂),那么这两个动作一定是同时成功或者同时失败的。 1.2 事务的定义 维基百科的定义:事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位,由 一个有限的数据库操作序列构成。 这里面有两个关键点, 第一个,它是数据库最小的工作单元,是不可以再分的。 第二个,它可能包含了一个或者一系列的 DML 语句,包括 insert delete update。 1.3 哪些存储引擎支持事务 InnoDB 支持事务,这个也是它成为默认的存储引擎的一个重要原因: https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html 另一个是 NDB。 1.4 事务的四大特性 第一个,原子性,Atomicity,也就是我们刚才说的不可再分,也就意味着我们对数 据库的一系列的操作,要么都是成功,要么都是失败,不可能出现部分成功或者部分失 败的情况,以刚才提到的转账的场景为例,一个账户的余额减少,对应一个账户的增加, 这两个一定是同时成功或者同时失败的。