mysql索引如何使用

介绍

小编给大家分享一下mysql索引如何使用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强>一、索引是什么

1。索引简介
索引其实是以文件形式存储在磁盘上的一种数据结构,索引检索需要磁盘I/O操作。与主存不同,磁盘I/O存在机械运动耗费,因此磁盘I/O的时间消耗是巨大的。

2。IO简介
IO在计算机中指输入与输出,由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘,网络等,就需要IO接口。生活例子:需要记住关键的事情都需要写在笔记本上,需要的时候在拿出来看,每次去笔记本上看记录时就是IO,如果记忆好的人会记住这件事情,直接就能读出来,这就是缓存(计算机里面更加不能一直保存)。

<强>二、索引算法

1。数据库基本都是使用B +树算法实现

2。数据库索引是使用磁盘I/O次数来评价索引结构的优劣

3. B - Tree
(1) B -树的定义,可知检索一次最多需要访问h -个节点(根节点常驻内存)。数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入

(2)实际实现B -树还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个节点只需一次I/O

(3)采用B - Tree存储结构,搜索时的I/O次数一般不会超过3次,所以用B -树作为索引结构效率是非常高的,但是B -树中的节点根据实际情况可以包含大量的关键字信息和分支

4. B +树
(1) B -树的搜索复杂度为O (h)=O (logdN),所以树的出度d越大,深h度就越小,I/O的次数就越少。B +树恰恰可以增加出度d的宽度,因为每个节点大小为一个页大小,所以出度的上限取决于节点内键和数据的大小

(2)由于B +树的内节点去掉了数据,因此可以拥有更大的出度,从而拥有更好的性能

<强>三、聚集索引与非聚集索引

1。聚簇索引
(1)聚簇索引的数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是相邻地存放在磁盘上的。聚簇索引要比非聚簇索引查询效率高很多

(3)每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放

(4) Innodb的默认索引

2。非聚簇索引

(1)非聚集索引,类似于图书的附录,那个专业术语出现在哪个章节,这些专业术语是有顺序的,但是出现的位置是没有顺序的。但是,一个表可以有不止一个非聚簇索引

(2)实现原理就是使用叶子节点存储引用行的主键(可以说是聚集索引)

(3)聚集索引是非聚簇索引的一种索引,即主+辅索引的索引方式,这种主+辅索引的好处是,当发生数据行移动或者页分裂时,辅助索引树不需要更新,因为辅助索引树存储的是主索引的主键关键字,而不是数据具体的物理地址

(4)所以非聚簇索引要访问两次索引

<强>四、索引的类型

1.独特(唯一索引):不可以出现相同的值,可以有NULL值

2.指数(普通索引):允许出现相同的索引内容

3。PROMARY键(主键索引):不允许出现相同的值

4。全文索引(全文索引):可以针对值中的某个单词,但效率很差

5。组合索引:实质上是将多个字段建到一个索引里,列值的组合必须唯一

<强>五、索引技巧

1。索引不会包含有无效的列

(1)只要列中包含有NULL值,都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此符合索引就是无效的

2。使用短索引

(1)对串列进行索引,如果可以就应该指定一个前缀长度,例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是唯一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作

3。索引列排序

(1) mysql查询只使用一个索引,因此如果,子句中已经使用了索引的话,那么命令中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列建复合索引

4.像语句操作

(1)一般情况下不鼓励使用像操作,如果非使用不可,注意正确的使用方式,像“% aaa %”不会使用索引,而像“aaa %”可以使用索引

mysql索引如何使用