5.索引简介

索引是什么:

  1.MySQL官方对索引的定义为:索引(Index) 是帮助MySQL高效获取数据的数据结构

  2.可以理解为  “排好序的快速查找数据结构”

    索引是排好序的,能够用于快速查找的数据结构,索引可以帮助我们两点:

    1.对于需要排序的相关的命令,可以减轻cpu的负担

    2.可以加快查询速度,减少IO操作

      无索引,直接去读表数据存放的磁盘块,读到数据缓冲区中再查找需要的数据。

      有索引,先读入索引表,通过索引表直接找到所需数据的物理地址,并把数据读入数据缓冲区中

  数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构以某种方式指向数据

  这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

  3.一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上

  4.我们平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,并不一定是二叉的)结构组织的索引

  其中聚集索引、次要索引、覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引

  当然,除了B+树这种类型的索引之外,还有哈希索引(hash  index 等)

优势:

  1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本

  2.通过索引列队数据进行排序,降低数据排序的成本,降低CPU的消耗

劣势:

  1.实际上索引也是一张表,该表有主键 和 索引 两个字段,并指向实体表的记录,所以索引列也是要占空间的

  2.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERTUPDATE和DELETE。

  因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列额字段

  都会调整因为更新所带来的键值变化后的索引信息

  3.索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,

   就需要花时间研究建立最优秀的索引,或者优化查询语句

MySQL索引分类: 

  1.单值索引   即一个索引只包含单个列,一个表可以有多个单值索引

  2.唯一索引   索引列的值必须唯一,但允许有空值

  3.复合索引   即一个索引包含多个列

基本语法:

  创建:

    CREATE  [UNIQUE]  INDEX  indexName  ON  tableName(columnName(length))

    ALTER  tableName  ADD  [UNIQUE]   INDEX  [indexName]  ON  (columnName(length))

  删除:

    DROP  INDEX  [indexName]  ON   tableName

  查看:
    SHOW  INDEX  FROM  tableName

  

MySQL索引结构:

  BTree索引   ----  检索原理 (后面一篇文章解释)

  Hash索引

  full-text 全文索引

  R-Tree 索引 

哪些情况下需要创建索引

  1.主键自动建立唯一索引

  2.频繁作为查询条件的字段应该创建索引

  3.查询中与其他表关联的字段,外键关系建立索引

  4.Where 条件 里用不到的字段不创建索引

  5.单值/复合 索引的选择问题  (在高并发下倾向创建复合索引)

  6.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

  7.查询中统计或者分组字段

哪些情况不要创建索引

  1.表记录太少,记录太少,用了索引也没什么效果

  2.经常增删改的表,对表的更新,MySQL不仅要保存数据,还要保存一下索引文件

  3.数据重复且分布平均的表字段,因此应该只为最经常查询和最经常排序的数据列建立索引

  注意:如果某个数据列包含许多重复的内容,为它建立索引就没有太大的效果

  

 

时间: 2024-11-01 04:34:34

5.索引简介的相关文章

mysql命令行下创建和删除索引简介

mysql命令行下创建和删除索引简介: mysql中创建索引可以使用CREATE TABLE语句,也可以用CREATE INDEX或ALTER TABLE来给表增加索引.索引的删除可以使用ALTER TABLE或DROP INDEX语句来实现. (1)使用ALTER TABLE语句创建索引.语法如下:alter table table_name add index index_name (column_list) ;alter table table_name add unique (colum

Oracle 索引 简介

1 索引的创建语法: CREATE UNIUQE | BITMAP INDEX <schema>.<index_name> ON <schema>.<table_name> (<column_name> | <expression> ASC | DESC, <column_name> | <expression> ASC | DESC,...) TABLESPACE <tablespace_name>

索引(简介,创建,删除)

一.索引简介 索引是一种特殊的数据结构,由数据库中一列或多列组合而成,用来快速查询数据库表中的特定记录.索引是提高数据库性能的重要方式.MySQL中,所有的数据类型都可以被索引.MySQL的索引包括普通索引.唯一性索引.全文索引.单列索引.多列索引和空间索引等. 1.索引的含义和特点 索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构. 通过索引,查询数据时可以不必读完记录的所有信息,而只是查询索引列.否则,数据库系统将读取每条记录的所有信息进行匹配. 不同的存储引擎定义了每个表

SQL Server索引进阶:第一级,索引简介

By David Durant, 2014/11/05 (first published: 2011/02/17) 原文地址: Stairway to SQL Server Indexes: Level 1, Introduction to Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Server Indexes)的一部分. 索引是数据库设计的基础,向开发者显示了使用数据库大量数据库设计者的意图.不幸的是,索引大部分时候是在出现性能问题的时候,才被事后

MySql索引简介

从"找"到B+树 索引是用来查找的. 折半查找是一种很优秀的方式.适合于 范围查找,固有缺点就是需要元素是有序的.二叉搜索树就是对折半查找的一种基础的实现. 但二叉搜索树当遇到特殊数据的时候,会出现"偏坠",影响性能.所以就出现了平衡二叉树,来保证在各种情况下,折半查找的效率稳定. 平衡二叉树还有问题,那就是当大量数据时树高会迅速增高,需要多次切换树节点,所以并不适合外存,所以就出现了树高低,树节点信息多的多叉树-B树. B+树 如何使用B+树查找数据 每一个索引都

数据库索引简介

---------------------数据库索引--------------------- 1.索引的概念: 数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询.更新数据库表中数据.索引的实现通常使用B树及其变种B+树. 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法.这种数据结构,就是索引. 注:为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的

索引深入浅出:索引简介

很多人对索引都没有一个清晰的认识,对于聚集索引和非聚集索引之间的区别也不是很清楚.如果有人问我索引是什么,我觉得这个问题有点大,很难在一篇文章里解释清楚.所以我决定尝试写这一系列文章,用一个简单的,可以理解的方法解释索引,尽管网上关于索引的文章有一箩筐那么多. 简单来说,索引帮助数据库引擎使用最小的资源,最高效的找到需要的数据.通过唯一列索引可以保证数据的连贯性,当索引不一定要建在唯一列上.在忙碌的系统里,通过增加并发操作,可以提高性能.在一个表上建立的各个索引可以满足不同用户的请求,但这也是个

SQL Server索引简介:SQL Server索引级别1

作者David Durant,2014/11/05(第一版:2011/02/17) 原文链接: http://www.sqlservercentral.com/articles/Stairway+Series/72284/ 该系列 本文是"Stairway系列:SQL Server索引的阶梯"的一部分 索引是数据库设计的基础,并告诉开发人员使用数据库关于设计者的意图.不幸的是,当性能问题出现时,索引往往被添加为事后考虑.这里最后是一个简单的系列文章,应该使他们快速地使任何数据库专业人员

普通索引和唯一索引的区别、性能差异,以及其他索引简介

唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n). 1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引.只要有可能,就应该选择一个数据最整齐.最紧凑的数据列(如一个整数类型的数据列)来创建索引. 2.唯一索引 普通索引允许被索引的数据列包含重复的值.比如说,因为人有可能同名,所以同一个姓名在同一个