索引

索引

两盒软妹~` 提交于 2020-03-02 21:07:20
1、索引的概念 索引是一种数据库对象,它是基于表中的一个列或多个列的值,提供对表进行快速访问的一种访问机制。索引的目标是提高数据提取的速度。 2、索引的优缺点 优点: 1. 创建唯一性索引,保证数据库表中每一行数据的唯一性 2. 大大加快数据的检索速度,这也是创建索引的最主要的原因 3. 加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。 4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 缺点: 1. 索引创建在表上,不能创建在视图上 2. 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加 3. 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚 合 索引,那么需要的空间就会更大 4. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度 索引的使用原则: ( 1 ) 索引字段建议建立 NOT NULL约束 ( 2 ) 作为主键的列和经常用在表间连接的列,在连接字段上应该建立索引; ( 3 ) 经常需要排序的列 , 经常出现在 Where子句中的字段且过滤性很强的,特别是大表的字段,应该建立索引; ( 4 ) 可选择性高的关键字,应该建立索引; ( 5 ) 可选择性低的关键字,但数据的值分布差异很大时,选择性数据比较少时仍然可以利用索引提高效率 ( 6

Mysql5.7新特性Online DDL

╄→гoц情女王★ 提交于 2020-03-02 18:02:37
ALGORITHM=INPLACE,可以避免重建表带来的IO和CPU消耗,保证ddl期间依然有良好的性能和并发。 ALGORITHM=COPY,需要拷贝原始表,所以不允许并发DML写操作,可读。这种copy方式的效率还是不如 inplace ,因为前者需要记录undo和redo log,而且因为临时占用buffer pool引起短时间内性能受影响。 1、在线添加索引: alter table test_emp add index idx_id (c1),ALGORITHM=INPLACE; 2、在线添加字段: alter table test_emp add name varchar(100) not null default '',ALGORITHM=INPLACE; 3、在线修改字段属性: alter table test_emp ALGORITHM=INPLACE,modify c6 varchar(85) not null default ''; 1.PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) ,ALGORITHM=INPLACE; 2.UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`

索引学习(一)

♀尐吖头ヾ 提交于 2020-03-02 17:53:08
在海量信息发展的今天,如何快速的查找和定位到我们需要的数据成为一种挑战,而数据库索引也是这一挑战中最为基础的元素。 索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。 1. 索引的类型   B-树索引   位图索引   HASH索引   索引编排表   反转键索引   基于函数的索引   分区索引   本地和全局索引 2. 索引优点: 2.1  通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。 2.2  可以大大提高数据的检索速度,这也是创建索引的最主要的原因。 2.3  可以提高表和表之间的连接速度,特别是在实现数据的参考完整性方面特别有意义。 2.4  在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。 2.5  通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。 3. 索引的缺点: 3.1  创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。 3.2  索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。 3.3  当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护

深入理解MySQL底层实现

自古美人都是妖i 提交于 2020-03-02 13:01:12
本文摘自: http://harlon.org/2018/06/20/database/ 深入理解MySQL底层实现 这里选用MySQL作为了解数据库的底层实现,这是因为MySQL是目前最常用的数据库,了解它的底层实现也基本上对目前大数据的数据库所用的技术会有一个大致的了解。数据库最主要的索引设计,了解数据库的索引设计基本上就对数据库有了大致的了解,其次对其事务的ACID操作实现原理做以分析,以及数据库中所用到的提高其性能的优化等等。 存储引擎 MySQL常用的存储引擎有InnoDB和MyISAM,其中MyISAM是MySQL的默认存储引擎。 InnoDB InnoDB的存储文件有两个,后缀名分别是.frm和.idb,其中.frm是表的定义文件,而idb是数据文件。InnoDB中存在表锁和行锁,不过行锁是命中索引的情况下才会起作用的。 InnoDB支持事务,且支持四种隔离级别,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏

神奇的 SQL 之 WHERE 条件的提取与应用

你。 提交于 2020-03-02 12:18:48
问题描述 一条 SQL 在数据库中是如何执行的呢 ?相信很多人都会对这个问题比较感兴趣。但是,感兴趣归感兴趣,你得去追呀,还臆想着她主动到你怀里来 ? 一条 SQL 在数据库中的生命周期涵盖了 SQL 的词法解析、语法解析、权限检查、查询优化、SQL执行等一系列的步骤,是一个相当复杂的过程,不亚于你追她的艰苦历程,不是只言片语就说的完的。但是,大家先别紧张,上面说的那些了,今天一个也不讲,气不气 ? 今天和大家一起来看一下 SQL 生命周期中比较有意思的一个环节 给定一条 SQL,如何提取其中的 where 条件 ? where 条件中的每个子条件,在 SQL 执行的过程中有分别起着什么样的作用 ? SQL 执行流程 这是 MySQL 数据库中 SQL 的执行流程,其他数据库应该类似 关系型数据库中的数据组织 关系型数据库中,数据组织涉及到两个最基本的结构:表与索引。表中存储的是完整数据记录,分为堆表和聚簇索引表;堆表中所有的记录无序存储,聚簇索引表中所有的记录则是按照记录主键进行排序存储。索引中存储的是完整记录的一个子集,用于加速记录的查询速度,索引的组织形式,一般均为B+树结构 MySQL 的 InnoDB 采用的是聚簇索引表,数据记录和索引是一起存储的,类似如下 InnoDB 二级索引(非聚簇索引)的结构与聚集索引的结构基本相同,只是叶子节点有些许差别

第三章、索引的创建查询

感情迁移 提交于 2020-03-02 12:17:51
索引创建 ES的API组成结构:使用RESTful API风格来命名API API基本格式:http://<ip>:<port>/<索引>/<类型>/<文档id> 常用HTTP动词:GET/PUT/POST/DELETE 使用Head插件创建非结构化索引 访问:localhost:9100 路径:索引->新建索引->索引名称:book->点击OK 索引名称:必须小写,不能有中划线 操作如下 默认分片5 副本1 创建完成后,显示如下 粗线框是主分片,细线框是备份 以上是非结构化的创建索引 如何区分索引是结构化的还是非结构化的 来源: CSDN 作者: 荒-- 链接: https://blog.csdn.net/wangqing84411433/article/details/104607482

数据库索引的作用

北战南征 提交于 2020-03-02 11:50:26
偶然在一个公众号上看到一篇对数据库索引的作用进行了通俗易懂的说明,为此特意借鉴过,留作备忘参考。 问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去? 于是,图书管理员设计了一套规则: (1)一楼放历史类,二楼放文学类,三楼放IT类… (2)IT类,又分软件类,硬件类… (3)软件类,又按照书名音序排序… 以便快速找到一本书。 与之类比,数据库存储了1000W条数据,要从中找到name=”shenjian”的记录,一条条查,要查到什么时候去? 于是,要有 索引 ,用于提升数据库的查找速度。 问题2. 哈希(hash)比树(tree)更快,索引结构为什么要设计成树型? 加速查找速度的数据结构,常见的有两类: (1) 哈希 ,例如HashMap,查询/插入/修改/删除的平均时间复杂度都是O(1); (2) 树 ,例如平衡二叉搜索树,查询/插入/修改/删除的平均时间复杂度都是O(lg(n)); 可以看到, 不管是读请求,还是写请求 ,哈希类型的索引,都要比树型的索引更快一些,那为什么,索引结构要设计成树型呢? 索引设计成树形,和SQL的需求相关。 对于这样一个 单行查询 的SQL需求: select * from t where name=”shenjian”; 确实是哈希索引更快,因为每次都只查询一条记录。 所以

B-树

六眼飞鱼酱① 提交于 2020-03-02 11:29:21
B-树(读作B树) mysql数据库的索引基于Hash表或B+树 索引采用树结构存储,查询效率高,还可以操持有序。 数据库不使用二叉树的原因: 从算法逻辑上来讲,二叉树的查找速度和比较次数都是小的。但是,要考虑磁盘IO。 数据库的索引是存储在磁盘上的,当数据量比较大的时候,索引的大小可能有几个G甚至更多,当我们利用索引查的时候,不可能把整个索引全部加载到内存,只能逐一加载每一个磁盘页(磁盘页对应索引数的节点) 磁盘IO数是由数的高度确定的,磁盘IO数<=树的高度 为了减少磁盘IO,就要把树变得"矮胖",这就是B-树的特征之一 B树是一种多路平衡查找树,一个m阶B树有如下几个特征: 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m 3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m 4.所有的叶子结点都位于同一层。 5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。 应用:MongoDB 来源: CSDN 作者: 蒟蒻级玩家 链接: https://blog.csdn.net/qq_44144735/article/details/104605384

数据库学习(二)

依然范特西╮ 提交于 2020-03-02 10:47:38
外模式包括若干视图,模式包括基本表,内模式包括如存储文件。 内模式改变,不影响模式,即数据的物理独立性。模式外变,不影响外模式,即数据的逻辑独立性。 模式SCHEMA、表TABLE、视图VIEW、索引INDEX。其中模式和视图不能修改,只能删除重新创建。模式关于数据库和表的布局及特性的信息。 视图 视图,由一个或若干个基本表导出的表。数据存放在导出视图的基本表中,因此视图是一个虚表。 CREATE VIEW 视图名 AS 子查询 视图的作用: 能够简化用户的操作,只需要对虚表操作 以多种角度看待同一数据 为数据提供安全保护,不同用户不同视图 索引 当表的数据量比较大时,查询操作比较耗时。建立索引是加快查询速度的有效手段。大多数为B+树索引,也可以为Hash索引。索引也会占用存储空间。 数据库安全性 权限控制GRANT,不同用户不同权限。 最重要的是审计功能,把用户对数据库的操作自动记录下来放入审计日志。利用审计日志来监控数据库的各种行为。 数据加密 触发器 用户定义在关系表上的一类由事件驱动的特殊过程。触发器又叫做事件-条件-动作规则。当特定事件发生时,如果条件满足,则执行相应动作。 CREATE TRIGGER BEFORE\AFTER 触发事件 FOR EACH WHEN 来源: https://www.cnblogs.com/chenshaowei/p/12394084