mysql创建索引

Mysql骚操作:优化大分页查询

北慕城南 提交于 2020-04-03 18:40:16
背景 系统结构如上图。经过排查是因为 系统B拉取数据时间太长导致的推送超时。 系统B拉取数据的方法是根据_tiemstamp(数据操作时间)分页查询系统A的接口,即: 1SELECT 字段名2FROM 表名3WHERE _timestamp >= beginTime AND _timestamp <= endTime 4LIMIT n, m; 由于该数据是从其他数据源中导入的,所以_timestamp这个字段值几乎相同,这就导致了在我们的查询范围内存在大约 150万 的数据。一般遇到这种情况,首先想到的就是 是否需要给_timestamp添加索引 ,这张表上是存在_timestamp索引的。那么为什么还会出现这个问题呢?这就要从分页查询本身说起了。 分页查询的性能瓶颈 B+树简述 首先我们要了解InnoDB存储引擎中的B+数索引。这里我简单总结一下: 上图是一颗B+树,通过观察我们可以发现它的一些特点:   1.每个节点中子节点个个数不能少于m/2个,不能大于m个(B+树是一颗m叉树,图中m=3)   2.根节点的节点个数可以超过m/2个,这是一个例外 上述两点特性是为了保证B+树的查询效率。 节点数超过m越多,在总节点数相同的情况下,树的高度h就越小,此时m叉数就会向链表退化(O(logn)->O(n))。   节点数小于m/2越多,在总节点数相同的情况下,树的高度h就越高

MySQL表介绍

假装没事ソ 提交于 2020-03-31 17:37:01
MySQL InnoDB表介绍 一、索引组织表 在InnoDB引擎中,表都是根据主键顺序存放的。这种存储方式称为索引组织表,在InnoDB引擎中,每张表都有逐渐。如果没有显示定义主键,则引擎会按照以下方式选择或创建主键。 (1)、判断表是否有非空唯一索引,如果有,则该字段为主键。如果有多个非空唯一索引,则选择第一个定义的非空索引字段作为主键(定义索引的顺序,不是定义字段的顺序) (2)、如果不符合上述条件,InnoDB自动创建一个6字节大小的指针。 二、InnoDB逻辑存储结构 从InnoDB得逻辑存储结构看,索引数据放在一个空间中,称作表空间。表空间又由段(segment),区(extend),页(page)组成。InooDB的逻辑存储结构大致如下图所示: 1、表空间 表空间可以看作InnoDB存储引擎逻辑存储结构的最高层,所有数据都放在表空间中。5.7默认启用参数innodb_file_per_table。每张表数据放在一个单独的表空间里边,如果关闭该参数,所有数据放在一个表空间ibdata1内。 如果启用innodb_file_per_table该参数,每张表的表空间存放的是数据,索引,插入缓冲Bitmap页。其他类的数据,如回滚(undo)信息,插入缓冲索引页,系统事务信息,二次写缓冲等还是放在原来的共享表空间内。 2、段 表空间是由各个段组成的,常见有数据段、索引段

10分钟梳理MySQL核心知识点

被刻印的时光 ゝ 提交于 2020-03-31 04:09:29
今天我们用10分钟,重点梳理一遍以下几方面: 数据库知识点汇总; 数据库事务特性和隔离级别; 详解关系型数据库、索引与锁机制; 数据库调优与最佳实践; 面试考察点及加分项。 一、数据库的不同类型 1.常用的关系型数据库 Oracle:功能强大,主要缺点就是贵 MySQL:互联网行业中最流行的数据库,这不仅仅是因为MySQL的免费。可以说关系数据库场景中你需要的功能,MySQL都能很好的满足,后面详解部分会详细介绍MySQL的一些知识点 MariaDB:是MySQL的分支,由开源社区维护,MariaDB虽然被看作MySQL的替代品,但它在扩展功能、存储引擎上都有非常好的改进 PostgreSQL:也叫PGSQL,PGSQL类似于Oracle的多进程框架,可以支持高并发的应用场景,PG几乎支持所有的SQL标准,支持类型相当丰富。PG更加适合严格的企业应用场景,而MySQL更适合业务逻辑相对简单、数据可靠性要求较低的互联网场景。 2.NoSQL数据库(非关系型数据库) Redis:提供了持久化能力,支持多种数据类型。Redis适用于数据变化快且数据大小可预测的场景。 MongoDB:一个基于分布式文件存储的数据库,将数据存储为一个文档,数据结构由键值对组成。MongoDB比较适合表结构不明确,且数据结构可能不断变化的场景,不适合有事务和复杂查询的场景。 HBase:建立在HDFS

《数据库优化》- MySQL优化

瘦欲@ 提交于 2020-03-29 18:31:23
前言   MySQL作为我们最常用的 关系型数据库 ,在开发中,肯定会遇到数据量比较大的情况,而没有足够的性能作为保障,往往查询会比较慢。下面,我们展开来聊聊MySQL怎么优化的。 一、MySQL性能   1、最大数据量   没有数据量和并发数的数据库性能都是没有灵魂的。   MySQL没有限制 单表最大记录数 ,它取决于操作系统对文件大小的限制。   《阿里巴巴Java开发手册》推荐:单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。   性能由综合因素决定,抛开业务复杂度,影响程度依次是: 硬件配置、MySQL配置、数据表设计、索引优化 。 500万这个值仅供参考,并非铁律。   有位大佬操作过超过4亿行数据的单表,分页查询最新的20条记录耗时0.6秒。   SQL大致是: select field_1,field_2 from table where id < #{prePageMinId} order by id desc limit 20 ;   prePageMinId是上一页数据记录的最小ID。   虽然当时查询速度还凑合,随着数据不断增长,有朝一日必定不堪重负。   分库分表是个周期长而风险高的大活儿,应该尽可能在当前结构上优化,比如升级硬件、迁移历史数据等等,实在没辙了再分。对分库分表感兴趣的同学可以阅读分库分表的基本思想。      2

MySQL存储引擎介绍

狂风中的少年 提交于 2020-03-28 07:43:50
一 存储引擎解释   首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点。     在讲清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs、fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户看懂实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。 那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件的系统格式特征类似,也有很多种存储方式。   但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户能够看到的数据是一样的。不同储引擎存取,引擎功能,占用空间大小,读取性能等可能有区别。说白了,存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上,底层的实现方式不同,那么就会呈现出不同存储引擎有着一些自己独有的特点和功能,对应着不同的存取机制。   因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即:对表的存储、操作等的实现方法不同),表是什么,表本质上就是磁盘上的文件。   其实MySQL支持多种存储引擎

MySQL4:索引

百般思念 提交于 2020-03-28 04:26:55
什么是索引 索引是对数据库表中一列或者多列的值进行排序的一种结构,所引用于快速找出在某个 列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间越多,如果表中查询的列有 一个索引,MySQL能快速到达一个位置去搜索数据文件,而不必查看所有数据。 索引的含义和特点 索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。 例如,数据库里面有20000条记录,现在要执行这么一个查询:SELECT * FROM table where num = 10000。如果没有索引,必须遍历整个表,直到num等于10000的这一行被找到为止;如果在num列上创建索引,MySQL不需要任何扫描,直接在 索引中找10000,就可以得知值这一行的位置。可见,索引的建立可以提高数据库的查询速度。 索引是在存储引擎中实现的,因此,每种存储引擎的索引都不一定完全相同,并且每种 存储引擎也不一定支持所有索引类型。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的额限制,MySQL中索 引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关

360°全方位比较PostgreSQL和MySQL

假如想象 提交于 2020-03-27 23:30:46
360°全方位比较PostgreSQL和MySQL 一、原文 https://www.enterprisedb.com/blog/postgresql-vs-mysql-360-degree-comparison 二、摘要 本文对MySQL和PostgreSQL进行详细的比较,方便选择。 1、为什么使用PostgreSQL 2、为什么使用MySQL 3、易用性 4、语法 5、数据类型 6、复制与集群 7、视图 8、触发器 9、存储过程 10、查询 11、分区 12、表的可伸缩性 13、NoSQL能力 14、安全 15、分析函数 16、GUI工具 17、性能 18、Adoption 19、最佳环境 三、PG vs MySQL:选择哪个? PostgreSQL和MySQL都是最流行的开源数据库。MySQL被认为是世界上最流行的数据库,而PostgreSQL被认为是世界上最先进的数据库。MySQL并不完全符合SQL标准,并且很多PG上的特性并不支持。这就是为什么PG受到大量开发者喜欢的原因,并且现在PG越来越流行。 前几年,Oracle收购了MySQL,导致MySQL的出现两个版本:商业版和社区版。对于后者,由于Oracle控制了MySQL的开发,受到了广大使用者的批评。 PostgreSQL是世界上最受欢迎的数据库:他支持大量企业级特性和功能。PG由postgresql全球社区开发

Java面试之MySQL

白昼怎懂夜的黑 提交于 2020-03-27 15:31:27
164. 数据库的三范式是什么? 第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。 第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。 第三范式:任何非主属性不依赖于其它非主属性。 表类型如果是 MyISAM ,那 id 就是 8。 表类型如果是 InnoDB,那 id 就是 6。 165. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几? InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。 166. 如何获取当前数据库版本? 使用 select version() 获取当前 MySQL 数据库版本。 167. 说一下 ACID 是什么? Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。 Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。 Isolation(隔离性)

mysql整理

时光怂恿深爱的人放手 提交于 2020-03-27 15:25:23
1.在 mysql 数据库内如何让自动增加字段从0开始 truncate table 表名 2.表中有A B C三列时,用SQL语句实现:当A列大于B列时选择A列,否则选择B列,当B列大于C列时选择B,否则选择C列 select case when A > B then A else B end, case when B > C then B else C end; 3. Redis Redis 是一个 key-value 存储系统。支持五种数据类型: (1) string (字符串) (2) list (列表) (3) hash ( hash 表) (4) set (集合) (5) zset (有序集合) 4. MyISAM 和 InnoDB 的区别 MyISAM 特点 (1)不支持事务、外键 (2)支持表级锁,不支持行级锁 (3)拥有较高的查询效率 InnoDB 特点 (1)支持事务、外键 (2)支持行级锁,并发性更高,需要的花销也更高 如果执行大量的 select , MyISAM 速度更快,如果执行大量的 insert 或 update , InnoDB 速度更快。执行 select count(*) from table 时, MyISAM 只是简单的读出保存好的行数,而 InnoDB 要扫描整个表来计算有多少行,如果执行 select count(*) from

九、索引(需大量数据进行实践练习)

≯℡__Kan透↙ 提交于 2020-03-26 14:34:49
聚集索引:数据行的物理地址顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有 一个聚集索引 。 非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。(非聚集索引就像新华字典的 偏旁字典 ,他结构顺序与实际存放顺序不一定一致) 索引在MySQL中也叫做“键”或者"key"(primary key,unique key,还有一个index key),是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要,减少io次数,加速查询。(其中primary key和unique key,除了有加速查询的效果之外,还有约束的效果, primary key 不为空且唯一,unique key 唯一,而index key只有加速查询的效果,没有约束效果 ) ​ 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 ​ 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 ​ 强调:一旦为表创建了索引,以后的查询最好先查索引,再根据索引定位的结果去找数据 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引.