索引

mysql索引

蓝咒 提交于 2020-02-12 05:40:28
索引使用建议: a,经常检索的列 b,经常用于表连接的列 c,经常排序/分组的列 索引不使用建议: a,基数很低的列 b,经常用于表连接的列 c,经常排序/分组的列 innodb主键特点: a,索引定义时,若不显示包含主键,会隐式加入主键值; b,索引定义时,若显示包含主键,会加入主键值; c,在5.6.9后,优化器已经能自动识别索引末尾的主键值(index extensions),在这之前则需要显式加上主键列才可以被识别; d,修改主键必然重新拷贝整张表 主键的选择建议: a,对业务透明无意义,免收业务变化的影响; b,主键要很少修改和删除;(删除还好,影响不大,innodb小范围做数据页合并) c,主键最好是自增的; d,不要具有动态属性,例如最后修改时间戳;(如果经常变化会导致聚集索引的值发生变化,相应的导致btree索引值旋转、分裂、位移) innodb聚集索引选择顺序原则: a,显示声明的主键; b,第一个不包含null值的唯一索引列; c,内置的rowid(自增逻辑值,6byte且不可引用) innodb聚集索引不建议选用频繁更新、随机写入(离散IO) 唯一索引(unique key) a,不允许具有索引值相同的行,从而禁止重复的索引或键值; b,在唯一约束上,和主键一样(以myisam引擎为代表); c,和主键区别:1,唯一索引允许有空值(null) 2

mysql索引原理

时光怂恿深爱的人放手 提交于 2020-02-12 04:40:05
为什么要使用索引?使用索引有什么优点和缺点? 使用索引是为了使我们查询变得更快。使用索引如果我们对数据进行修改或者删除那么他的索引也要随之改变,所以使用索引就会降低我们修改删除的效率。 mysql有几种索引类型? 普通索引:这一类索引可以创建在任何数据类型中,没有限制。 唯一索引:创建该类索引时,需要保证创建索引的那一列值是唯一的。 全文索引:全文索引只能创建在CHAR,VARCHAR,TEXT类型的字段上,主要是为了提高查询较大字符串的查询速度,只有MyISAM存储引擎支持 单列索引:在表中给单个列创建索引,单列索引可以是普通索引,唯一索引,全文索引 多列索引:在同一张表的多个列上创建索引 索引为什么会使查询效率大大提高? mysql默认使用的是B+树的数据结构。 索引:排好序的数据结构,类似于书的目录,我们可以通过一本书的目录,快速查找到我们需要的内容,而不需要一页一页的去查看。 mysql索引数据结构为什么要默认使用B+树,而不使用其他的数据结构? 据我了解的数据结构有,二叉树,红黑树,B树,B+树 (他们都有一个共同的特点,就是右边的数据一定都比左边的小) 二叉树: 以上两组数据虽然数字是一样的但是他们的顺序不一样,所以构建出来的二叉树不一样,通过上面这张图可以看出来,如果如果数据是从大到小或者是从小到大的顺序插入,这样会导致二叉树变为链表数据结构,链表查询效率比较慢

MySQL:索引

﹥>﹥吖頭↗ 提交于 2020-02-12 03:38:02
  索引的目的在于提高查询效率,它的作用就相当于一本书的目录; 1. 常见的索引模型 1.1 哈希表   优点:适用于等值查询的场景;   缺点:范围查询效率较低; 1.2 有序数组   优点:范围查询和等值查询效率较高;   缺点:插入、删除操作效率较低;   适用于静态存储引擎,保存一些不会修改的数据; 1.3 搜索树   二叉树是一个经典的数据结构,增删改查效率都不错。不过由于索引需要存储在磁盘中,使用二叉树时,当节点数量很大时,树的高度会变的很高,一次查询可能访问很多数据块,由于磁盘IO问题,导致效率偏低;   为了查询中尽量减少磁盘IO,必须访问尽量少的数据块,N叉树就是一个不错的选择;N叉树由于 读写性能上的优点 ,以及 适配磁盘的访问模式 ,已经广泛的用于搜索引擎。   磁盘IO是非常高昂的操作, 当进行一次磁盘IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内 ,因为 局部预读性原理 告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次磁盘IO。   设计数据库时,我们可以将N叉树的一个节点的大小设计为刚好一个操作系统的数据页大小

MySQL--索引

廉价感情. 提交于 2020-02-12 01:27:56
索引 索引是为了提高数据查询的效率,就类似与书的目录。 索引的常见模型 哈希表 ,也就是KV类型的结构,输入K即可得到相应的值,思路就是把值放到数组里,用一个哈希函数把K换成一个位置,然后在这个位置上找寻value。当不同的K经过换算有相同的结果是,采用拉链法。如下图: 在这个图中,倘若K换算后的值得到的N,那么目标就是N位置后面的链表的某一个。采用顺序查找。用哈希表查询等值很快,但是缺点是不能进行范围查询。 有序数组 ,相比于哈希表,有序数组的好处就是可以进行范围查询,同时,用二分的话,等值查询的性能也可以很好的保证。但是,有序数组的缺点就是只适合静态存储引擎。 二叉搜索树 ,根据二叉树的特点(左孩子小于父节点,右孩子大于父节点),可以很容易来搜索树中的某个值,但是二叉搜索树在一些情况下会出现左右高度不平衡,所以需要保持一颗二叉平衡树,这样查询的复杂度是O(logN),更新一个结点也是O(logN)。 但是实际上二叉树是很少使用的,原因无他,结点数量过多的情况下,二叉树的高度也增加,访问磁盘的次数也会增加,从而查询变慢,所以引入了N叉树,N的值取决于数据块点大小。 InnoDB的索引模型 InnoDB中,表都是根据主键顺序以索引的形式来存放的,使用B+树来存储。 每一个索引都对应有一个B+树,比如建立一个表并设置一个索引, CREATE table t6( id int

引用类型——数组

不问归期 提交于 2020-02-12 00:04:06
JavaScript 数组 javascript中数组也是最常使用的对象之一,数组是值的集合,由于弱类型的原因,javascript中数组十分灵活、强大,不像java等强类型高级语言数组只能存放同一类或其子类型元素,javascript在同一数组中可以存放多种类型的元素,而且长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改。 创建数组 1.无参构造函数,创建一空数组 var a1 = new Array(); 2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组。 var a2 = new Array(5); 3.带有初始化数据的构造函数,创建数组并初始化参数数据 var a3 = new Array(4,'hello',new Date()); 字面量 1.使用方括号,创建空数组,等同于调用无参构造函数 var a4=[]; 2.使用中括号,并传入初始化数据,等同于调用调用带有初始化数据的构造函数 var a5=[10]; 注意点 1.在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中 1 var a1=new Array(5); 2 console.log(a1.length);//5 3 console.log(a1); //[]

自古美人都是妖i 提交于 2020-02-11 23:33:40
堆 堆和优先队列 Heap and Priority Queue 普通队列:先进先出,后进后出 优先队列:出队顺序和入队顺序无关;和优先级相关 使用数组实现优先队列时间复杂度:O(n^2),使用堆的时间复杂度:O(nlgn) 最大堆是一颗完全的二叉树,并且任何一个节点都不大于它的父亲节点 所以我们可以使用数组存储二叉堆 二叉树相关概念 构造一个堆,并向里面添加和删除元素 package bobo.algo; import java.util.*; import java.lang.*; // 在堆的有关操作中,需要比较堆中元素的大小,所以Item需要extends Comparable public class MaxHeap<Item extends Comparable> { protected Item[] data; protected int count; protected int capacity; // 构造函数, 构造一个空堆, 可容纳capacity个元素 public MaxHeap(int capacity){ data = (Item[])new Comparable[capacity+1]; count = 0; this.capacity = capacity; } // 构造函数, 通过一个给定数组创建一个最大堆 // 该构造堆的过程,

MYSQL数据库学习----索引和触发器

强颜欢笑 提交于 2020-02-11 16:29:14
一:索引 索引是创建在数据库表上,其作用是提高对表中数据的查询速度。 假设数据库中有一张1000条记录的表格,如果没有创建索引的话,用户想通过查询条件查询,实际上是把整个数据库中1000条记录都读取一遍,满足查询条件的就加入结果集中,这样效率很低,如果表中创建了针对查询条件字段的索引,查询的时候会立即找到满足条件的记录加入结果集,不需要遍历过程,这样大大提高了数据库查询效率。 创建索引虽然提高了数据库表格的查询效率,但是也增加了数据库维护速度,因为索引需要占用物理空间,其次每次用户插入,更改,删除记录的时候都要同步操作索引,这样就造成数据维护速度降低,所以使用索引需要综合考虑索引的优点和缺点。 使用索引的几个建议 1.对经常作为查询条件的字段使用索引 2.如果需要用到索引尽量在整型字段上面使用索引 3.尽量使用唯一性的字段来创建索引 4.限制索引的数目,因为索引是占用物理空间的,并且数据更新需要同步操作索引,所以在索引的数量上面需要综合考虑 5.删除不再使用或者很少使用的索引 6.用户也可以在插入,更改,删除记录的时候先删除掉索引,在操作数据库,然后增加索引来使用 创建索引有几种方法: 1.创建表格的时候创建索引 创建普通索引 INDEX(字段名); 任意字段都可以 创建唯一索引 UNIQUE INDEX 索引名称(字段名); 唯一性字段可以

索引与触发器

百般思念 提交于 2020-02-11 16:19:28
1》索引的含义和特点:     索引是什么,索引相当于字典里面的目录序表,比如查询一个“星”字,如果不按照拼音来找的话,那么我们需要把整个字典全部遍历查询一边。才能查到这个字, 如果按照拼音来找的,那么只需要在几页音序表中查询。就可以通过音序就快速查到,这个字在字典的哪一页。在数据库中,索引是建立在表上面的,索引可以很大程 度上提高数据库的查询,同时也提高了数据库的性能,不同的存储引擎定义了索引的最大长度和索引的数量,所有的存储引擎对每个表最少支持16个索引,索引的长度 最少支持位256字节;   索引优点:     其优点可以提高数据的检索速度,针对于有依赖关系的子表和父表,在联合查询的时候可以提高查询速度。   索引的缺点:     创建和维护索引需要消耗时间,索引需要占用物理空间,每一个索引都需要占用一定的物理空间,大量的索引会影响插入数据,数据库系统会按照索引进行排 序,这样降低了插入数据的速度;    解决办法:在插入数据时,先临时删除表的索引,然后插入数据,数据插入完成后,再创建索引。 2》索引的分类:   Mysql的索引类型有:普通索引,唯一性索引,全文索引,单列索引、多列索引和空间索引等;   1>普通索引     创建普通索引时,不附加任何限制条件,,这类索引可以创建在任何的数据类型上面,   2>唯一性索引     使用unique参数可以设置唯一索引

【Python基础】list列表

守給你的承諾、 提交于 2020-02-11 09:40:28
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 Python有6个序列的内置类型,但最常见的是列表和元组。 序列都可以进行的操作包括索引,切片,加,乘,检查成员。 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。 列表的数据项不需要具有相同的类型 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示: list1 = ['physics', 'chemistry', 1997, 2000];list2 = [1, 2, 3, 4, 5 ];list3 = ["a", "b", "c", "d"]; 与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。 访问列表中的值 使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示: #!/usr/bin/pythonlist1 = ['physics', 'chemistry', 1997, 2000];list2 = [1, 2, 3, 4, 5, 6, 7 ];print "list1[0]: ", list1[0]print "list2[1:5]: ", list2[1:5] 以上实例输出结果

数据分析(一)

半腔热情 提交于 2020-02-11 06:29:59
学习python要有面向数组/多维数组的编程思维 numpy好的地方就在于可以进行数组层面的操作,不用循环去处理数组中的每一个元素,这叫做矢量化,以上用的函数基本都要在前面加上np. ndarray里面是同一种类型的数据 切片的赋值会影响到源数据 如果只是复制一份切片,需要用到copy() type(arr)是看arr的整个类型 arr.dtype是看arr中元素的数据类型 如何改变数据类型用astype 但是是产生一个新的数组,原数组类型不变 将元组列表等序列数组转换为ndarray用asarray 但是是创建了一个新的数组,原arr没有变 两种取值方式是等价的 以整数数组来取出对应数组 若传入多个整数数组,返回的是索引元组,注意是元组 本应该是一个3x3的矩阵才对,要想取得矩阵需要这样 还可以用np.ix_函数 用.T取得数组的转置 还可以通过transpose函数来转换轴来实现数组的转置 其中参数是变换后轴位置的元组,(1,0)表示,把原来的0轴和1轴对换 swapaxes函数是用来交换轴的,只能传入两个参数,意味着这个函数只能交换两个2轴 通用函数(ufunc):快速元素级数组函数 从字面上理解就是进行元素级别的函数,如sqrt、exp、maximum等 可以用来划分整数和小数的函数modf,返回的是两个数组 《利用python进行数据分析