资讯专栏INFORMATION COLUMN

mysql索引详解

el09xccxy / 361人阅读

摘要:聚簇索引要比非聚簇索引查询效率高很多每个表只能有一个聚簇索引,因为一个表中的记录只能以一种物理顺序存放的默认索引非聚簇索引非聚集索引,类似于图书的附录,那个专业术语出现在哪个章节,这些专业术语是有顺序的,但是出现的位置是没有顺序的。

一、什么是索引

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

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

二、索引算法

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

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

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

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

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

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

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

三、聚集索引与非聚集索引

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

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

(4) Innodb的默认索引

2.非聚簇索引

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

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

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

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

四、索引的类型

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

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

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

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

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

五、索引技巧

1.索引不会包含有NULL的列

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

2.使用短索引

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

3.索引列排序

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

4.like语句操作

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

5.不要在列上进行运算

6.不使用NOT IN 、<>、!=操作,但<,<=,=,>,>=,BETWEEN,IN是可以用到索引的

7.索引要建立在经常进行select操作的字段上

(1) 这是因为,如果这些列很少用到,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求

8.索引要建立在值比较唯一的字段上

9.对于那些定义为text、image和bit数据类型的列不应该增加索引。因为这些列的数据量要么相当大,要么取值很少

10.在where和join中出现的列需要建立索引

11.where的查询条件里有不等号(where column != …),mysql将无法使用索引

12.如果where字句的查询条件里使用了函数(如:where DAY(column)=…),mysql将无法使用索引

13.在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用

14.explain可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句

六、索引与锁

1.锁用到索引就是行锁,如果没有用到索引就是表锁,所以操作的数据必须用到锁才行

(1) 如果没有建立索引的话,在进行数据选取或者定位的时候是通过全表扫描的形式来进行的,这样就会形成表锁,要是有索引的话就会直接定位到指定的行,就是形成行锁,这里注意在更新数据时假如没用到索引也会全表扫描

END

1.部分内容摘自网络

2.希望大家多多指教

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/47914.html

相关文章

  • MySQL explain命令详解

    摘要:使用方法列的解释值意义一旦找到了与行相联合匹配的行,就不再搜索了。这是重要的列,显示连接使用了何种类型。显示可能应用在这张表中的索引。这种情况下,可以在语句中使用来强制使用一个索引或者用来强制忽略索引。认为必须检查的用来返回请求数据的行数。 explain显示了MySQL如何使用索引来处理SELECT语句以及连接表。在分析慢查询时,可以帮助选择更好的索引和写出更优的查询语句。 使用方法...

    hufeng 评论0 收藏0
  • MySQL中EXPLAIN结果的参数详解

    摘要:子查询中的第一个。查询中同时使用两个或更多索引,然后对索引结果进行合并,再读取表数据。系统表,表中只有一行数据子查询中的返回结果字段组合是主键或唯一约束。显示可能应用在这张表中的索引。通过收集到的统计信息判断出不可能存在结果。 explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上e...

    Anonymous1 评论0 收藏0
  • Mysql调优之explain执行计划详解

    摘要:中无法利用索引完成的排序操作称为文件排序。子句的值总是,不能用来获取任何元组在没有子句的情况下,基于索引优化操作或者对于存储引擎优化操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。 前言 explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以...

    singerye 评论0 收藏0
  • [转] MySQL死锁问题分析及解决方法实例详解

    摘要:表级锁不会产生死锁所以解决死锁主要还是针对于最常用的死锁举例分析在中,行级锁并不是直接锁记录,而是锁索引。解决办法拆分第一条,先查出符合条件的主键值,再按照主键更新记录至此死锁问题得以解决 转自:http://www.phpstudy.net/b.php... MySQL死锁问题是很多程序员在项目开发中常遇到的问题,现就MySQL死锁及解决方法详解如下: 1、MySQL常用存储引擎的锁...

    warkiz 评论0 收藏0
  • MySQL存储引擎详解

    摘要:一常用存储引擎及特点存储引擎从版本之后,的默认内置存储引擎已经是了,他的主要特点有灾难恢复性比较好支持事务。 一、MySQL常用存储引擎及特点 1、InnoDB存储引擎 从MySQL5.5版本之后,MySQL的默认内置存储引擎已经是InnoDB了,他的主要特点有: (1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复度,通过MVCC(并发版本控制)来实现的。(3)使用的锁...

    Achilles 评论0 收藏0

发表评论

0条评论

el09xccxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<