美文网首页
MYSQL数据库索引

MYSQL数据库索引

作者: 叫我小码哥 | 来源:发表于2018-02-21 19:37 被阅读0次

        了解过MYSQL数据库的人,都知道索引能提高查询效率。那么为什么索引能提高查询效率?小编将自己的一些看法分享给大家。

1.什么是索引?

        索引的本质是一种数据结构。(B+树)我们都知道索引是建立在数据表的某一列上,具有索引列上的值的数据都会存储在数据结构中。

2.索引的重要性。

        索引就好比一本书的目录,通过目录就可以快速的找到自己所需要的某一页。设想一下要是没有目录,那么我们就要一页一页进行查找,如果我们所需要的是这本书的最后一页,那么就太费时了。我们都知道MYSQL数据库中的数据都是存放在磁盘中,增添了索引就能大大的减少对磁盘的访问,提高了查询效率。

3.索引的底层到底是什么?

    在MYSQL中不同的存储殷勤索引底层的实现是不一样的。

        MYISAM存储殷勤底层的数据结构为为B+树,该树的结构下图如图所示,

例如:我们要查询Select stuName form student where stuId = 1。先查看MYI文件(B+树的数据结构在MYI文件)查看stuID 是否有索引如果有就会查找索引树  通过data找到地址对应MYD(数据库中数据表的数据在MYD文件中)的文件位置将结果值返回给我们。MYISAM存储殷勤的索引也成为非聚集索引。

INNODB存储殷勤的底层数据结构是B+树,结构如下图所示所示,

INNODB的存储殷勤的叶子节点携带了数据,该存储殷勤的索引也称聚集索引。

4.是不是索引越多越好?

         1.当数据量比较少时,不适合用索引。例如,当一本书的内容只有2页时,目录就有5页,这是      得不偿失的。

          2.索引虽然提高查询的效率,但是在insert,updata,delect降低了更新表的速度。

5.什么情况下不适合建立索引?

        1.在查询过程中很少用到的查询列。

        2.表记录太少。

        3.经常増删改的表。

        4.某个数据列包含许多重复的内容。

6.索引在什么情况下失效?

        1.全字匹配我最爱 

         例如:一个学生表的某一个索引由stuName,stuAge,stuPos这三列组成,sql语句为 select *    from student where stuName='张三',stuAge='12' and stuPost=12; 如果where条件后面的属性的顺序和建立索引时属性的顺序不同那么索引失效。

       2. 最佳左前缀法则

        例如:索引是由这stuName,stuAge,stuPos三列组成那么查询语句。查询语句为select stuName,stuAge,stuPos foem student 不会发生索引。如果查询条件为select stuAge,stuPos foem student 会发生索引。

        3.在索引列上做(计算,函数,类型装换)操作会导致索引失效。

        例如:select * from student where left(name,1) = '张';

       4.mysql在使用!= 或者 <> 时索引失效。

        5.在使用is null  或者 not is null 也会导致索引失效。

        6.在使用kike%abc会导致所以失效,kikeabc%不会导致索引失效。

        7.数字字符串不加单引号会导致索引失效。

        8.使用or链接词会导致索引失效。

这些就是小编的一些看法。不足之处希望大家能指出来。

相关文章

  • MySQL索引简述--BTree索引

    MySQL数据库有如下几种常见的索引类型: BTree索引 哈希索引 全文索引 索引的本质 MySQL官方对索引的...

  • MySQL 索引和 SQL 调优

    MySQL索引 MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引...

  • MYSQL记录

    简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础和类型...

  • PHP面试之数据库—创建高性能索引

    真题 简单描述MySQL中,索引、主键、唯一索引、联合索引的区别,对数据库的性能有什么影响? MySQL索引的基础...

  • face17 mysql创建高性能索引

    mysql创建高性能索引 简单描述 mysql中 索引 主键 唯一索引 联合索引的区别对数据库性能有什么影响 创建...

  • 干货:mysql索引的数据结构

    索引 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 我们知道,数据库查...

  • 从原理到优化,深入浅出数据库索引

    MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。数据库查询是数据库的最主要...

  • mysql数据库优化

    索引优化:见mysql索引及数据库引擎mysql查询执行的过程:1、mysql客户端/服务端通信 -> 2、查...

  • mysql高级知识

    mysql高级知识系列目录 存储过程与函数 理解MySQL数据库覆盖索引 为什么 MySQL 索引要使用 B+树而...

  • MySQL书目

    MySQL数据库索引设计与优化 MySQL技术内幕 MySQL排错指南 高性能MySQL MySQL DBA修炼之道

网友评论

      本文标题:MYSQL数据库索引

      本文链接:https://www.haomeiwen.com/subject/mbantftx.html