转载出:http://blog.csdn.net/qq_19557947/article/details/76951912

一、Mysql索引主要有两种结构:B+Tree索引和Hash索引

Hash索引

mysql中,只有Memory(Memory表只存在内存中,断电会消失,适用于临时表)存储引擎显示支持Hash索引,是Memory表的默认索引类型,尽管Memory表也可以使用B+Tree索引。Hash索引把数据以hash形式组织起来,因此当查找某一条记录的时候,速度非常快。但是因为hash结构,每个键只对应一个值,而且是散列的方式分布。所以它并不支持范围查找和排序等功能。

B+Tree索引

B+Tree是mysql使用最频繁的一个索引数据结构,是Inodb和Myisam存储引擎模式的索引类型。相对Hash索引,B+Tree在查找单条记录的速度比不上Hash索引,但是因为更适合排序等操作,所以它更受欢迎。毕竟不可能只对数据库进行单条记录的操作。

带顺序访问指针的B+Tree

B+Tree所有索引数据都在叶子节点上,并且增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。

这样做是为了提高区间效率,例如查询key为从18到49的所有数据记录,当找到18后,只要顺着节点和指针顺序遍历就可以以此向访问到所有数据节点,极大提高了区间查询效率。

大大减少磁盘I/O读取

数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点需要一次I/O就可以完全载入。

二、选择索引的数据类型

Mysql支持很多数据类型,选择合适的数据类型存储数据对性能有很大的影响。

(1)越小的数据类型通常更好:越小的数据类型通常在磁盘、内存和cpu缓存中都需要更少的空间,处理起来更快。

(2)简单的数据类型更好:整形数据比起字符,处理开销更小,因为字符串的比较更复杂。在MySQL中,应用内置的日期和时间数据类型,而不是字符串来存储时间;以及用整形数据存储IP地址。

(3)尽量避免NULL:应该制定列为NOT NULL,除非你想存储NULL。在MySQL中,含有空值的列很难进行查询优化,因为他们使得索引、索引的统计信息以及比较运算更加复杂。

三、MySQL常见索引有:主键索引、唯一索引、普通索引、全文索引、组合索引

1,INDEX(普通索引):ALTER TABLE 'table_name' ADD INDEX index_name('col')

最基本的索引,没有任何限制

2,UNIQUE(唯一索引):ALTER TABLE 'table_name' ADD UNIQUE('col')

与“普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。

3,PRIMARY KEY(主键索引):ALTER TABLE 'table_name' ADD PRIMARY KEY('col')

是一种特殊的唯一索引,不允许有空值。

4,FULLTEXT(全文索引):ALTER TABLE 'table_name' ADD FULLTEXT('col')

仅可用于MyISAM和InoDB,针对较大的数据,生成全文索引很耗时耗空间

组合索引:ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3')

为了更多的提高mysql效率可建立组合索引,遵循“最左前缀”原则。创建复合索引应该将最常用(频率)做限制条件的列放在最左边,依次递减。组合索引最左字段用in是可以用到索引的。相当于建立了col1,col1col2,col1col2col3三个索引

四,索引使用注意事项

1,不要滥用索引

①,索引提高查询速度,却会降低更新表的速度,因为更新表时,mysql不仅要更新数据,保存数据,还要更新索引,保存索引

②,索引会占用磁盘空间

2,索引不会包含含有NULL值的列

复合索引只要有一列含有NULL值,那么这一列对于此符合索引就是无效的,因此我们在设计数据库设计时不要让字段的默认值为NULL。

3,MySQL查询只是用一个索引

如果where字句中使用了索引的话,那么order by中的列是不会使用索引的

4,like

like '%aaa%'不会使用索引而like "aaa%"可以使用索引

mysql两种索引结构_19.Mysql索引结构及常见索引的区别相关推荐

  1. MySQL 两种存储引擎:MyISAM与InnoDB对比及理解

    MySQL 两种存储引擎:MyISAM与InnoDB对比及理解 目前MySQL默认的存储引擎是InnoDB 现在大多数时候我们使用的都是InnoDB存储引擎,但是在某些情况下使用MyISAM更好,比如 ...

  2. mysql 两种存储引擎 MyISAM 和InnoDB

    mysql 两种存储引擎 MyISAM 和InnoDB MyISAM 是MySQL中默认的存储引擎,一般来说不是有太多人关心这个东西.决定使用什么样的存储引擎是一个很tricky的事情,但是还是值我们 ...

  3. ❤比较两种模糊特效❤filter: blur(10px)和backdrop-filter: blur(10px)的区别

    请先忽略背景图,遮罩位置是随便放的,我们主要关注下面的代码↓ <!doctype html> <html lang="en"> <head>&l ...

  4. MySQL两种表存储结构MyISAM和InnoDB的性能比较测试

    MySQL支持的两种主要表存储格式MyISAM,InnoDB,上个月做个项目时,先使用了InnoDB,结果速度特别慢,1秒钟只能插入10几条.后来换成MyISAM格式,一秒钟插入上万条.当时决定这两个 ...

  5. 【无标题】MySQL两种安装方式

    #MySQL  数据库介绍 关系型数据库(数据存放在硬盘): MySQL 5.7 及之前的版本,开源软件 → 8.0 商业软件 Oracle(甲骨文) 商业软件 MariaDB 开源软件 SqlSer ...

  6. MySQL两种存储引擎: MyISAM和InnoDB

    数据库中的存储引擎其实是对使用了该引擎的表进行某种设置,数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的"效果" ...

  7. 【MySQL】MySQL 两种排序算法

    1.概述 原文:高性能MySQL一书.再抄的,找得快. 无论如何排序都是-一个成本很高的操作,所以从性能角度考虑,应尽可能避免排序或者尽可能避免对大量数据进行排序. 当不能使用索引生成排序结果的时候M ...

  8. MySQL两种存储引擎: MyISAM和InnoDB 简单总结

    转自:https://www.cnblogs.com/kevingrace/p/5685355.html MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed S ...

  9. mysql两种引擎的适用场景_MySQL两种引擎的区别和应用场景

    Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL ...

最新文章

  1. Yann LeCun等最新研究:如何对未来实例分割进行预测?
  2. SAP QM MB56 报表没有结果之分析与对策
  3. leetcode算法题--Flood Fill
  4. Linux的目录结构与目录管理
  5. 德国精品软件 Steganos Safe 数据加密软件
  6. java如何转成jar包,修改及反编译可运行Jar包实现过程详解
  7. linux下调试工具的应用
  8. GitLab CI/CD conda: command not found
  9. Linux平台kafaka安装及使用
  10. 油猴(Tampermonkey)安装教程
  11. 开源的魔兽世界参考架构——mangos--网络游戏引擎BigWorld 服务器介绍
  12. python实现归结演绎推理_归结演绎推理
  13. e470c拆机图解全拆 thinkpad_e470c拆机图解全拆 thinkpad_THINKPAD e470硬盘拆解教程是?...
  14. 使用命令结束Linux系统
  15. SNF快速开发平台--规则引擎介绍和使用文档
  16. flex布局文字溢出显示省略号失效的解决方法
  17. poi 颜色对照表
  18. 西门子SMART 200 modbus rtu通讯宇电温控器例程 运行/停止的控制及指示;温度设定,上下限报警设定
  19. 【Linux】linux 查看服务器配置:核数和内存
  20. get a foot in the door 迈出第一步

热门文章

  1. jquery ajax json 数据的遍历
  2. C/C++如何传递二维数组?
  3. 第四章:4.2MySQL 权限系统介绍
  4. java数据类型之间的转化
  5. 自学MVC——添加一个控制器
  6. Extjs--FormPanel(2)
  7. pythonprint()_python基础1 print()函数
  8. ubuntu python版本切换_ubuntu18.04 python版本切换
  9. 【Matlab 控制】构建系统,绘制零极点
  10. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案