sql优化

mysql_关系型数据库

佐手、 提交于 2020-02-02 09:57:41
01数据库简介 • 为什么需要数据库? 1、数据量越来越大,对于数据的记录和准确查找, 2、数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性。 • 关系型数据库与非关系型数据库 数据库的分类: 1、关系型数据库 指采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。主流的关系型数据库有:Oracle、Microsoft SQL Server、MySQL、PostgreSQL,SQLite、MariaDB(MySQL的一个分支)Microsoft Access、SAP。 2、非关系型数据库 指非关系型的,分布式的,以键值对存储且结构不固定,可以减少一些时间和空间的开销。非关系型数据库都是针对某些特定的应用需求,主要分为以下几类: 1). 面向海量数据访问的面向文档数据库:MongoDB、Amazon、DynamoDB、Couchbase等。 2). 面向高性能并发读写的key-value数据库: Redis、 Memcached等。 3). 面向搜索数据内容的搜索引擎:Elasticsearch,Splunk,Solr,MarkLogic和Sphinx等。 4). 面向可扩展性的分布式数据库:Cassandra,HBase等。 02 关系型数据库 1、E—R模型 当前物理的数据库都是按照E

MySQL

a 夏天 提交于 2020-02-02 09:30:47
一、索引 B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化 使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎 InnoDB MyISAM 比较 四、数据类型 整型 浮点数 字符串 时间和日期 五、切分 水平切分 垂直切分 Sharding 策略 Sharding 存在的问题 六、复制 主从复制 读写分离 参考资料 一、索引 B+ Tree 原理 1. 数据结构 B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。 B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。 在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 key i 和 key i+1 ,且不为 null,则该指针指向节点的所有 key 大于等于 key i 且小于等于 key i+1 。 2. 操作 进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。 插入删除操作会破坏平衡树的平衡性,因此在插入删除操作之后

索引与优化

≡放荡痞女 提交于 2020-02-02 02:02:19
参考: http://blog.csdn.net/xluren/article/details/32746183 http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引。 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。 执行下面的SQL语句: 1 mysql> SELECT id,FROM_UNIXTIME( time ) FROM article WHERE a.title= '测试标题' 查询需要的时间非常恐怖的,如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存

MySQL高级——索引 (内附索引高频面试题)

三世轮回 提交于 2020-02-01 23:24:27
目录 一、索引介绍以及使用 1.1 什么是索引? 1.2 索引的分类? 1.3 索引的创建、查询、删除 的方式? 二、高频面试题(通过面试题更能了解索引) 2.1 什么是索引? 2.2 MySQL索引是什么样的数据结构? 2.3 MySQL中的常用的存储引擎 MyISAM与InnoDB的区别? 2.4 如何选择存储引擎 MyISAM与InnoDB? 2.5 MyISAM与InnoDB实现BTree索引的方式不同在哪? 2.6 为什么要使用索引?(索引的优点?) 2.7 索引是怎么提高查询速度的? 2.8 既然索引这么多好处,为什么不给表中的每一列都创建索引?(索引的缺点?) 2.9 使用索引有哪些注意事项?(使用索引时,SQL语句怎么优化?) 2.10 什么是最左前缀原则? 2.11 什么是覆盖索引? 一、索引介绍以及使用 1.1 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 从官方定义中,我们可以知道索引本质是一种数据结构。 详细一点的解释就是: 数据库除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构通过某种方式指向数据。如此一来,就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是 索引。 简单一点的解释就是: 索引是排好序的可快速查找的数据结构。 形象一点的解释就是:

2020年寒假假期总结0201

别等时光非礼了梦想. 提交于 2020-02-01 20:45:31
  使用Sqoop将mysql数据传到hive   系统环境:hadoop2.65,mysql5.7.28,sqoop1.47,hive1.2.2,虚拟机centos7,物理机windows10    注意点:安装sqoop不要将目录设在hadoop下面,否则在运行下面命令时会发生找不到jar包的问题,我估计是系统将hadoop的lib目录认为成了sqoop的lib目录了。因为在我把相应的jar包放在hadoop的lib文件下时就可以通过,由于有很多jar包,所以一个jar找到了,又会有一个jar包找不到,所以建议不要放在hadoop目录下。   操作要求:将物理机的mysql数据转到虚拟机的mysql,然后使用sqoop将虚拟机的mysql转到hive中。   1.在物理机中使用Navicat的导出向导,获取sql文件,利用里面的建表语句,在虚拟机的mysql中建表,需要注意的是,linux的建表语句和windows有些许差异,比如:在编码的改动,需要将原来的编码utf8mb4_0900_ai_ci改成utf8_general_ci,utf8mb4改成utf8。   2.然后利用传输工具将sql文件传给虚拟机,然后虚拟机开启mysql,使用source命令调用sql文件,然后执行文件将所有数据插入mysql中。   3.然后我们在hive中创建相应的表

SQL 2017——新功能

 ̄綄美尐妖づ 提交于 2020-02-01 19:54:46
目录 背景 介绍 identity_cache 自适应查询处理的改进 自动调整 图数据库 始终可用(跨数据库访问) DTA的改进 新的字符串成员(函数) SQL 2017中的SSRS(Reporting Services)新增功能 SQL 2017中SSIS(集成服务)的新增功能 SQL 2017中的SSAS(Analysis Services)新增功能 机器学习 Linux支援 背景 SQL Server 2017 (一般可用性版本)于 2017 年 10 月发布(真的吗?我们只是想了解 SQL 2016 的功能,好吧,开个玩笑 :) ) SQL 2017 分部分发布,其第一部分即 SQL 2017 CTP 1.0 ( SQL 版本 14.0.1.246 )于 2016 年 11 月发布(如何在 2016 年发布 2017 版本?)。到目前为止, SQL 2017 推出了 10 个发行版,当前发行版是 SQL 2017 Release GA ( SQL 版本 14.0.1000.169 )( 请 参见 此处 ),以获取 2017 年 10 月可用的版本。 ( ** 有关 SQL 2016 的新增功能,请参见此处。 ) 介绍 此版本的 SQL 主要连接到 Linux ,并将 SQL 的功能带到 Linux 。简而言之,现在您可以在 Linux 上安装 SQL 2017

SQL 2019——新特征

故事扮演 提交于 2020-02-01 18:53:21
目录 背景 介绍 专业开发者版本 图形增强 UTF-8支持 错误讯息 语言支援 空间参考标识符 对大数据的支持 加速数据库恢复[ADR] 在线操作 始终可用 增强安全性 始终使用安全区域加密 数据分类 证书管理 性能 查询强制计划 减少重新编译 顺序键优化 内存数据库支持 混合缓冲池 OLTP对数据库快照的支持 对TempDB的支持 广泛的平台支持 监督 sys.dm_os_wait_stats lightweight_query_profiling 自定义捕获策略 dm_exec_query_plan_stats 智能查询处理 行模式内存授予反馈 标量UDF 表变量延迟编译 近似查询处理 内存设置选项 最小内存 最大内存 SQL机器学习的新特征 SSRS的新特征(报告服务) 背景 Microsoft SQL Server 数据库 1.0 的第一个版本是在 1989 年开发的,并且确实一直持续到现在,每个改进的版本都引入了更多的灵活性和可用性。 SQL 2017 于 2017 年发布,支持 Linux ( Redhat , Ubuntu , Linux 服务器)和 Docker 引擎,这是 SQL 团队迈出的重要一步。从 SQL Server 2016 开始, SQL 仅支持 64 位处理器,现在他们又开始使用这个最新版本了。 ( ** 有关 SQL 2017 的新增特征

MySQL日常使用笔记

╄→尐↘猪︶ㄣ 提交于 2020-02-01 11:03:03
逍遥山人的MySQL使用笔记,持续更新中 表结构 新建表以及添加表和字段的注释 create table t_user( ID INT(11) primary key auto_increment comment '主键', NAME VARCHAR(255) comment '姓名', CREATE_TIME date comment '创建时间' )comment = '用户信息表'; 修改字段类型 alter table tablename modify column column_name varchar(30); 查看表结构 查看表的字段、字段类型、索引等 DESC tablename; 或 SHOW COLUMNS FROM tablename; 或包含字符集、字段注释等 SHOW FULL FIELDS from table_name; 查看表生成的DDL 注意表名不加单引号 show create table 表名; 查看分区表的分区情况 SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM information_schema.PARTITIONS WHERE table_schema = SCHEMA() AND

如何书写高效的MySQL查询?

纵饮孤独 提交于 2020-02-01 10:22:20
How to write efficient MySQL query statements WHERE子句中的书写注意事项 模糊查询(like)时需要注意的事项 索引 字段类型 表连接时的注意事项 其他注意事项 WHERE 子句中的书写注意事项 首先应考虑在 where 及 order by 涉及的列上建立索引。 下列操作会导致引擎放弃使用索引而进行全表扫描,是应尽量避免的。 1).在 where 子句中使用 != 或 <> 操作符 2).在 where 子句中对字段进行 null 值判断 如: select id from t where num is null; 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0; 3).在 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; 4).in 和 not in 也要慎用 如: select id from t where num in(1,2,3); 对于连续的数值,能用 between 就不要用 in 如:

[Mysql] 索引详解

此生再无相见时 提交于 2020-02-01 10:05:09
前言: 今天在这里总结一下Mysql索引,也给自己加个印象。 我的座右铭:即使记性再差,仍要坚持多读多看。 概念 Mysql索引的建立对于Mysql的高效运行是很重要的,索引可以大大提高Mysql的检索速度。 Mysql目前主要有以下5中索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 缺点: 索引也有它的缺点,过多的滥用索引,也会降低更新表的速度。如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。 5种索引类型 普通索引 这是最基本的索引,他没有任何限制。可以用如下方式创建: 直接创建索引 create index index_name on table ( column ( length ) ) 修改表结构的方式添加索引: alter table table_name add index index_name on ( column ( length ) ) 创建表的时候同时创建索引 CREATE TABLE ` table ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` title ` char ( 255 ) CHARACTER NOT NULL , ` content ` text CHARACTER NULL