索引

MySQL索引策略及优化

别说谁变了你拦得住时间么 提交于 2020-02-10 16:38:04
MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。本章讨论的高性能索引策略主要属于结构优化范畴。本章的内容完全基于上文的理论基础,实际上一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑。 1. 示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例。本文选用MySQL官方文档中提供的示例数据库之一:employees。这个数据库关系复杂度适中,且数据量较大。下图是这个数据库的E-R关系图(引用自MySQL官方手册): MySQL官方文档中关于此数据库的页面为 http://dev.mysql.com/doc/employee/en/employee.html 。里面详细介绍了此数据库,并提供了下载地址和导入方法,如果有兴趣导入此数据库到自己的MySQL可以参考文中内容。 2. 最左前缀原理与相关优化 高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理。 这里先说一下联合索引的概念。在上文中,我们都是假设索引只引用了单个的列,实际上,MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组<a1, a2, …, an>

【转】MySql索引

与世无争的帅哥 提交于 2020-02-10 15:21:32
https://segmentfault.com/a/1190000010991930 索引(key)是存储引擎用于快速找到记录的一种数据结构。它和一本书中目录的工作方式类似——当要查找一行记录时,先在索引中快速找到行所在的位置信息,然后再直接获取到那行记录。 在MySql中,索引是在存储引擎层而不是服务器层实现的,所以不同的存储引擎对索引的实现和支持都不相同。 B-TREE索引 B-TREE索引是使用最多的索引。很多存储引擎采用的都是B-TREE数据结构的变体实现该索引,例如InnoDB使用的是B+TREE,即每个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点范围遍历。 不同存储引擎使用B-TREE索引的方式也不同。例如MyISAM使用前缀压缩技术使索引更小,而InnoDB则按照原数据格式进行存储。再如MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键引用被索引的行。 B-TREE中的所有值都是按顺序存储的,每个叶子页到根的距离相同。下图展示了InnoDB中的B-TREE索引是如何工作的: 当查找一行记录时,存储引擎会先在索引中搜索。从索引的根节点开始,通过比较节点页的值和要查找的值逐层进入下层节点,最底层叶子节点的指针指向的是被索引的数据。这样的查找方式避免了全表扫描,加快访问数据的速度。此外因为B-Tree对索引列是顺序存储的

Elasticsearch6.x概览(一)

≯℡__Kan透↙ 提交于 2020-02-10 08:37:30
1.基本概念 下面介绍Elasticsearch的一些基本概念。 从一开始就理解这些概念将极大地帮助简化学习过程。 1.1.近实时(NRT) Elasticsearch是一个近实时搜索平台。 这意味着从索引文档到可搜索文档的时间有一点延迟(通常是一秒)。 1.2.集群 集群是一个或多个节点(服务器)的集合,它们共同保存整个数据,并提供跨所有节点的联合索引和搜索功能。 集群由唯一名称标识(集群的名字),默认情况下为“elasticsearch”。 此名称很重要,因为如果节点设置为按名称加入群集,则同名的Elasticsearch节点会加入同一个集群。 确保不要在不同的环境中重用相同的集群名称,否则最终会导致节点加入错误的群集。 例如,您可以使用 logging-dev , logging-stage 以及 logging-prod 用于开发,生产集群。 请注意,拥有一个只包含单个节点的集群是完全正常的。 此外,您还可以拥有多个独立的集群,每个集群都有自己唯一的集群名称。 1.3.节点 节点是作为集群一部分的单个服务器(可以理解为单个Elasticsearch实例,一个进程),存储数据并参与集群的索引和搜索功能。 与集群一样,节点由名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。 如果不需要默认值,可以定义所需的任何节点名称。

Oracle中唯一约束和唯一索引的区别

非 Y 不嫁゛ 提交于 2020-02-10 07:09:36
在使用TOAD来操作Oracle数据库时,会注意到创建约束时有Primary Key、Check、Unique和Foreign Key四种类型的约束,这与SQL Server中的约束没有什么区别,这里的Check约束除了用于一般的Check约束外,在Oracle中也用于非空约束的实现。也就是说如果一个字段不允许为空,则系统将会创建一个系统的Check约束,该约束定了某字段不能为空。 除了约束,还有另外一个概念是索引,在TOAD中创建索引的界面如下: 我们可以注意到在唯一性组中有三个选项:不唯一、唯一和主键。那么创建索引时的唯一、主键与创建约束时候的唯一约束和主键约束有什么区别呢? 这里的可能容易产生误解,其实创建主键的结果是一样的,不管是在创建约束时创建还是创建索引时创建,都会创建一个主键约束和对应的一个唯一索引。 创建唯一约束与创建唯一索引有所不同: 创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。 创建唯一索引只会创建一个唯一索引,不会创建Constraint。 也就是说其实唯一约束是通过创建唯一索引来实现的。对于前端开发人员来说这两者有什么区别吗?好像没有。都是不能插入重复的值。在删除时这两者也有一定的区别,删除唯一约束时可以只删除约束而不删除对应的索引,所以对于的列还是必须唯一的,而删除了唯一索引的话就可以插入不唯一的值。

python DataFrame索引选项

主宰稳场 提交于 2020-02-10 05:39:27
obj[val]-----------选取DataFrame的单个列或一组列,在一些情况下会比较便利:布尔型数组(过滤行)、切片(行切片)、布尔型DataFrame obj.ix[val]---------------选取DataFrame的单个行或一组行 obj.ix[:,val]----------------选取单个列或列的子集 obj.ix[val1,val2]------------同时选择行和列 reindex方法-----------------将一个或多个轴匹配到新索引 xs---------------------根据标签选取单行或单列,并返回一个Series icol、irow方法---------------根据整数位置选取单列或单行,并返回一个Series get_value、set_value------------根据行标签和列标签选取、重置单个值 来源: https://www.cnblogs.com/mahailuo/p/8320184.html

derby数据库ql语法

我只是一个虾纸丫 提交于 2020-02-10 05:34:11
【数据库知识】 主键、唯一键包含索引 主键包含唯一键、索引、非空 唯一键包含索引,可空或非空 数据库需要与执行服务的在同个目录下 唯一键 create table app.tyu ( primarykey int primary key, com_no int not null unique, name varchar(32) default 'jack' ) 自动加值 GENERATED ALWAYS AS IDENTITY create table svse ( uid int generated by default as identity, Uname varchar(5) , Upass varchar(10), constraint P_KEY_1 primary key (uid) ) 查询所有索引 select * from sys.sysconglomerates, sys.SYSCONSTRAINTS where sys.SYSCONGLOMERATES.TABLEID = sys.SYSCONGLOMERATES.TABLEID 创建索引 create index 索引名 on 表名(字段1, 字段2) 删除索引 drop index 索引名 在创建整数时,若要控制整数的位数,可使用decimal来表示 如int(2)可表示为decimal(2,0)

数据库的索引和锁

荒凉一梦 提交于 2020-02-09 20:10:34
一、索引 在之前,我对索引有以下的认知: 索引可以加快数据库的检索速度 表经常进行 INSERT/UPDATE/DELETE操作就不要建立索引了,换言之:索引会降低插入、删除、修改等维护任务的速度。 -索引需要占物理和数据空间。 了解过索引的最左匹配原则 知道索引的分类:聚集索引和非聚集索引 Mysql支持Hash索引和B+树索引两种 看起来好像啥都知道,但面试让你说的时候可能就GG了: 使用索引为什么可以加快数据库的检索速度啊? 为什么说索引会降低插入、删除、修改等维护任务的速度。 索引的最左匹配原则指的是什么? Hash索引和B+树索引有什么区别?主流的使用哪一个比较多?InnoDB存储都支持吗? 聚集索引和非聚集索引有什么区别? … 1.1聊聊索引的基础知识 首先Mysql的基本存储结构是页(记录都存在页里边): 各个数据页可以组成一个双向链表 而每个数据页中的记录又可以组成一个单向链表 每个数据页都会为存储在它里边儿的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录 以其他列(非主键)作为搜索条件:只能从最小记录开始依次遍历单链表中的每条记录。 所以说,如果我们写 select*fromuserwhereusername='Java3y’这样没有进行任何优化的sql语句

2018.7.19 . php复习

好久不见. 提交于 2020-02-09 18:04:39
PHP程序设计 1.请写出HTML标记meta的完整英文单词:metadata 2.相当于http文件头作用(向浏览器传回正确和精确地显示网页内容的消息)的meta标记的属性是http-equiv 3.PHP的全称是:PHP:Hypertext Preprocessor 4.PHP的两种运行方式是 CGI 和 mod_php 5.以 mod_php模式运行PHP,为什么每次修改php.ini的配置信息都需要重启apache,配置才生效? 以 mod_php模式运行php,意味着php作为apache的一个模块来启动的。因此只有在apache启动的时候会读取php.ini配置文件并加载扩展模块,在apache运行期间是不会再去读取和加载扩展模块的。 6. PHP中echo功能是 什么? 将PHP后台运行得到饿数据输出到浏览器页面中 7.输出的不同 $"加油";则(1)echo '中国$str!'; 输出中国$str! (2)echo "中国$str!" ;输出 中国加油! 8.其他类型的变量转化为布尔类型时,哪些值被认为是false? 布尔值false,整形值0,浮点值0.0,空白字符串,字符串'0',空数组,特殊数据类型NULL,没有设定的变量。 9.在浏览器中运行以下PHP代码,在三个文本框中依次分别输入1、2、3,则浏览器页面输出 sparkqty321 10.和C不同