分享人:王汇通
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
9.鸣谢
索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构。
例如这样一个查询:select * from student where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由于索引是经过某种算法优化过的,因而查找次数要少的多。可见,索引是用来定位的。
从数据搜索实现的角度来看,索引也是另外一类文件/记录,它包含着可以指示出相关数据记录的各种记录。其中,每一索引都有一个相对应的搜索码,字符段的任意一个子集都能够形成一个搜索码。这样,索引就相当于所有数据目录项的一个集合
唯一索引:唯一索引是不允许其中任何两行具有相同索引值的索引
主键索引:数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键,该索引要求主键中的每个值都唯一
聚集索引:在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引
索引列:可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行
第一是:建立索引的目的是加快对表中记录的查找或排序,创建索引可以大大提高系统的性能
第一是:通过创建唯一索引,可以保证数据库表中每一行数据的唯一性
第二是:可以大大加快数据库的检索速度
第三是:可以加快表和表之间的连接,特别是在实现数据库的参考完整性方面方面
第四是:在使用分组和排序子句进行检索时,同时可以减少查询中分组和排序时间
一丶在设计数据库时,通过创建一个唯一索引,能够在索引和信息之间形成一对一映射关系,增加数据库的唯一性
二丶能够提高数据库的搜索以及检索速度,符合数据库建立的初衷
三丶能够捡块表和表之间的连接速度
在信息检索过程中,若使用分组以及排序子句进行时,通过建立索引能够有效的减少检索过程中所需的分组以及排序时间,提高效率
数据库中的索引储存引擎面用于快速查询找到记录的一种数据结构,索引对性能的影响非常重要,特别是在表中数据量达到百万级别的 时候,有无索引,或造成的性能差别非常大,正确的索引会极大提高查询的效率,就好比如一本书的目录,没有目录的情况查找的比较慢 有的话,查询速度截然相反
1丶表的主键,外键必须有索引
2丶数据量超过300的表应该有索引
3丶经常与其它表进行连接的表,在连接字段上应该建议索引
4丶经常出现weher子句中的字段,特别是大表的字段,应该建立索引
5丶索引应该建立在选择性高的字段上
6丶表的主键,外键必须有索引
将多次查询(多条select语句), 在记录上进行拼接(字段不会增加)
基本语法:多条select语句构成: 每一条select语句获取的字段数必须严格一致(但是字段类型无关)
我们在建立联合查询的时候,也就是对多个字段建立索引,这个时候数据库会让我们选择索引的顺序, 比如我们想在a,b,c,三个字段上建立一个联合查询,我们可以选择自己想要的优先级,a,b,c或者b,a,c等顺序 这个选择的顺序就引出了最左匹配原则。
举个列子看索引的执行情况
select * from student where c = '1'上面的句子不会执行index索引
select * from student where a = '1'索引是有序的,index1索引在索引的文件中排列是有序的,首先是跟据a来排序 然后是b来排序,最后是c排序
一丶什么情况下不适合建立索引?
二丶主键索引和唯一索引的区别?
三丶创建索引需要注意什么?
1丶对于查询过程中很少使用或参考的列,不应该建立索引
2丶对于哪些只有很少数据值的列,不应该建立索引
3丶对于那些定义image,text,和bit数据类型的列,不适合创建索引
4丶当修改性能远大于检索性能,不应该建立索引
1丶主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。
1丶主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。
1丶唯一性索引列允许空值,而主键列不允许为空值。
1丶主键可以被其他表引用为外键,而唯一索引不能。
1丶限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。
2丶避免在取值朝一个方向增长字段上,建立索引,由于字段的取值总是朝一个方向增长,新记录i总是放在索引的最后一页中,从而不断的引起该页的访问竞争
3丶删除不再使用,或者很少被使用的索引,表中的数据大量更新时,或者数据的使用的方式被改变后,原有的一些索引可能不再被需要
怎么使用索引才能提高索引的命中?
参考一:百度
参开二:简书
参考三:知乎
感谢观看,如有出错,恳请指正