mysql索引

什么是索引?

  索引技术是一种快速数据访问技术,它将一个文件的每个记录在某个或某些域上的取值与该记录的物理地址直接联系起来,提供了一种根据记录域的取值快速访问文件记录的机制。

       例:索引技术在功能上类似于图书术语索引,记录域的取值相当于图书术语索引表中的术语,记录的的物理地址对应于术语所在图书页号。

  索引技术的关键是建立记录域取值到记录的物理地址间的映射关系,这种关系称为索引。

索引的技术分类: 分为有序索引和散列索引。

对于基本表,可考虑在下面一些属性上建立索引

  (1)表的主码。(2)在where查询子句中引用效率高的属性(经常在where后面用作查询条件的) (3)参与连接操作的属性 (4)在order by 子句、group by子句中出现的属性。

  (5)在某一范围内频繁搜索的属性,但只有当使用索引的查询其结果不超过记录总数的20%时索引才会有明显的效果。

    (6)如果在where子句中同时包含一个表中的多个属性,则可以考虑在这些属性上建立多属性索引;

  此外,如果数据库文件需要频繁执行精确匹配查询(如等值查询),则可以考虑建立散列索引。而B+树等有序索引更适合于范围查询

  (7)当一个属性有相对较多的不同值时,使用索引有明显的作用;当一个属性的不同值很少时,使用索引没有好处。

   (8) 对包含大量空值的属性建立索引时要仔细考虑,因为很多数据库管理系统中的索引不引用具有空值的行,对空值的查找需要使用全表扫描来实现。

MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,全文索引。

聚集(clustered)索引,也叫聚簇索引。

定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。      

alter table table_name add primary key(colum_name)

非聚集(unclustered)索引。

定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。

使用 CREATE INDEX 语句

可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。

语法格式:

CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])

语法说明如下:

    • <索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。
    • <表名>:指定要创建索引的表名。
    • <列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。
    • <长度>:可选项。指定使用列前的 length 个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。
    • ASC|DESC:可选项。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC
原文地址:https://www.cnblogs.com/hellohero55/p/12121168.html