Mysql索引 索引有什么用( 四 )

  • 空间索引:空间索引是对空间数据类型的字段建立的索引,空间索引主要用于地理空间数据类型,很少用到 。
  • 全文索引:全文索引主要用来查找文本中的关键字,只能在 CHAR、VARCHAR 或 TEXT 类型的列上创建 。在 MySQL 中只有 MyISAM 存储引擎支持全文索引 。全文索引允许在索引列中插入重复值和空值 。
  • 索引在实际使用上分为单列索引和多列索引 。
    单列索引:单列索引就是索引只包含原表的一个列 。在表中的单个字段上创建索引,单列索引只根据该字段进行索引 。
    例如在student 表中的 address 字段上建立名为 index_addr 的单列索引,address 字段的数据类型为 VARCHAR(20),索引的数据类型为 CHAR(4) 。SQL 语句如下:
    CREATE INDEX index_addr ON student(address(4));
    这样,查询时可以只查询 address 字段的前 4 个字符,而不需要全部查询 。
    **多列索引也称为复合索引或组合索引 。**相对于单列索引来说,组合索引是将原表的多个列共同组成一个索引 。
    多列索引是在表的多个字段上创建一个索引 。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询 。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用 。
    下面在 student 表中的 name 和 address 字段上建立名为 index_na 的索引,SQL 语句如下:
    CREATE INDEX index_na ON tb_student(name,address);
    该索引创建好了以后,查询条件中必须有 name 字段才能使用索引 。
    一个表可以有多个单列索引,但这些索引不是组合索引 。一个组合索引实质上为表的查询提供了多个索引,以此来加快查询速度 。比如,在一个表中创建了一个组合索引(c1,c2,c3),在实际查询中,系统用来实际加速的索引有三个:单个索引(c1)、双列索引(c1,c2)和多列索引(c1,c2,c3) 。
    2.2 索引的查看查看索引的语法格式如下:
    SHOW INDEX FROM <表名>
    查询结果说明如下:
    Mysql索引 索引有什么用

    文章插图
    2.3 索引的创建创建索引有3种方式:
    1、CREATE INDEX直接创建:
    可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键 。
    CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
    语法说明如下:
    • <索引名>:指定索引名 。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的 。
    • <表名>:指定要创建索引的表名 。
    • <列名>:指定要创建索引的列名 。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列 。
    • <长度>:可选项 。指定使用列前的 length 个字符来创建索引 。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间 。在某些情况下,只能对列的前缀进行索引 。索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引 。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引 。
    • ASC|DESC:可选项 。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC 。
    【Mysql索引 索引有什么用】例如,在student表name字段上创建索引:
    • 普通索引:CREATE INDEX index_name ON student (name)
    • 唯一索引:CREATE UNIQUE index_name ON student (name)
    创建普通索引使用的关键字,例如在student表name字段上创建一个普通索引index_name
    • 建表创建:CREATE TABLE student(id INT NOT NULL,name CHAR(45) DEFAULT NULL,INDEX(name));
    • ALTER TABLE:ALTER student ADD INDEX index_name (name)
    2、 CREATE TABLE时创建
    索引也可以在创建表(CREATE TABLE)的同时创建 。在 CREATE TABLE 语句中添加以下语句 。例如创建student表时在name字段添加索引:
    • 主键索引:CREATE TABLE student(name CHAR(45) PRIMARY KEY);
    • 唯一索引:CREATE TABLE student(id INT NOT NULL,name CHAR(45) DEFAULT NULL,UNIQUE INDEX(name));
    • 普通索引:CREATE TABLE student(id INT NOT NULL,name CHAR(45) DEFAULT NULL,INDEX(name));
    3、 ALTER TABLE时创建
    ALTER TABLE 语句也可以在一个已有的表上创建索引 。例如在student表name字段上创建一个普通索引index_name: