MYSQL 索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。

创建和删除索引

普通类型(normal):

DROP INDEX 索引名 ON 表名;//删除
ALTER TABLE 表名 ADD INDEX 索引名 (字段名);//创建

唯一类型(unique):

删除同上;

ALTER TABLE 表名 ADD Unique 索引名 (字段名);//创建--注:该‘字段名’中数据必须不能重复,比如省份证号等

全文索引(full text):

删除同上;

ALTER TABLE 表名 ADD FULLTEXT (字段名);//创建

mysql索引类型

mysql索引类型normal,unique,full text的区别是什么?

normal:表示普通索引

unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用作索引时,可设置为unique

full text: 表示 全文搜索的索引。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。

总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。

mysql索引方法

在mysql中常用两种索引算法BTree和Hash,两种算法检索方式不一样,对查询的作用也不一样。
一、BTree

BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如:
select * from user where name like 'jack%';
select * from user where name like 'jac%k%';
如果一通配符开头,或者没有使用常量,则不会使用索引,例如:
select * from user where name like '%jack';
select * from user where name like simply_name;

二、Hash

Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。

但为什么我们使用BTree比使用Hash多呢?主要Hash本身由于其特殊性,也带来了很多限制和弊端:
1. Hash索引仅仅能满足“=”,“IN”,“<=>”查询,不能使用范围查询。
2. 联合索引中,Hash索引不能利用部分索引键查询。
对于联合索引中的多个列,Hash是要么全部使用,要么全部不使用,并不支持BTree支持的联合索引的最优前缀,也就是联合索引的前面一个或几个索引键进行查询时,Hash索引无法被利用。
3. Hash索引无法避免数据的排序操作
由于Hash索引中存放的是经过Hash计算之后的Hash值,而且Hash值的大小关系并不一定和Hash运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算。
4. Hash索引任何时候都不能避免表扫描
Hash索引是将索引键通过Hash运算之后,将Hash运算结果的Hash值和所对应的行指针信息存放于一个Hash表中,由于不同索引键存在相同Hash值,所以即使满足某个Hash键值的数据的记录条数,也无法从Hash索引中直接完成查询,还是要通过访问表中的实际数据进行比较,并得到相应的结果。
5. Hash索引遇到大量Hash值相等的情况后性能并不一定会比BTree高
对于选择性比较低的索引键,如果创建Hash索引,那么将会存在大量记录指针信息存于同一个Hash值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据访问,而造成整体性能底下。

mysql索引类型及方法介绍相关推荐

  1. 【转】 MySQL索引类型一览 让MySQL高效运行起来 mysql索引注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  2. MySQL索引类型总结和使用技巧以及注意事项

    在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 复制代码代码如下: CREATE TABLE mytable(   ID INT NOT NULL,    u ...

  3. MySQL索引类型详解,让MySQL高效运行起来

    为什么80%的码农都做不了架构师?>>>    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对 ...

  4. mysql介绍索引类型的章节_mysql索引总结--mysql索引类型以及创建的详细介绍

    关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型 ...

  5. 详细介绍mysql索引类型:FULLTEXT、NORMAL、SPATIAL、UNIQUE

    mysql索引类型:FULLTEXT.NORMAL.SPATIAL.UNIQUE的详细介绍 Normal 普通索引 Unique 唯一索引 Full Text 全文索引 SPATIAL 空间索引 bt ...

  6. mysql 普通索引使用方法,Mysql索引类型与基本用法实例分析

    本文实例讲述了Mysql索引类型与基本用法.分享给大家供大家参考,具体如下: 索引 MySQL目前主要有以下几种索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 - 普通索引 是最基本的索 ...

  7. mysql 索引都有哪些,mysql索引类型有哪些

    摘要 腾兴网为您分享:mysql索引类型有哪些,易信,微商助手,刷机精灵,数字涂色等软件知识,以及家校即时通,内部通讯录,叫叫识字大冒险,天天酷跑,手机电视高清直播,短信验证软件,诛仙表情包,一手女装 ...

  8. 数据库索引原理,及MySQL索引类型

    原文:数据库索引原理,及MySQL索引类型 - weixin_42181824的博客 - CSDN博客  https://blog.csdn.net/weixin_42181824/article/d ...

  9. MySQL索引类型一览 让MySQL高效运行起来

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

最新文章

  1. 计算机名称改变之后,HOUDINI Server 连接不上的解决办法
  2. 【OpenCV 4开发详解】颜色模型与转换
  3. 从源码分析DEARGUI之add_simple_plot
  4. 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
  5. 洛谷 P4430 小猴打架
  6. QuickStart系列:docker部署之MariaDB
  7. hadoop的yarn与node中的yarn冲突问题
  8. CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)
  9. 如何构建一个流量无损的在线应用架构 | 专题中篇
  10. 清除元素中的子元素html_HTML中的元素简介
  11. Java Object 类 深入分析
  12. 限定概率抽奖_LOL:欧皇一次抽奖得16个永久皮肤 把老马亏得坐公交啦
  13. Effective Objective-C 2.0 — 第二条:类的头文件中尽量少引入其他头文件
  14. shedlock 重启系统报错问题_关于国产湖南麒麟LINUX3.3系统兼容性问题
  15. Msql 主从原理介绍-通俗易懂
  16. iOS 各种证书/签名详解
  17. BIOS设置图解教程
  18. hadoop官网下载地址:
  19. java基于ssm的自助旅游管理系统
  20. 2005年图灵奖--彼得·诺尔简介

热门文章

  1. 简述敏捷团队,XP团队的特点。
  2. 码距与检错错位数、纠错位数的关系
  3. 第四章 智能合约 [20]
  4. 奥密克戎“后遗症”,比病毒更可怕
  5. python控制苹果手机触摸,Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战...
  6. 实现动画切换渐进渐出效果
  7. python magic number_编程中的「魔数」(magic number)是什么意思?平时我们能接触到哪些魔数?...
  8. 用python制作weblogo/SeqLogo/序列保守性分析图
  9. 工程训练(第一章 关于劳动 )-江苏海洋大学-mooc 答案
  10. 2019年十大国外边缘计算供应商