zoukankan      html  css  js  c++  java
  • Mysql 索引

    索引 is what ?
      索引是借助存储引擎实现的一种高效获取数据的数据结构。在查询数据时能有效避免全表扫面,从而实现高效获取数据。
      由于索引是排好序的数据结构,这就能有效的维护数据的唯一性,并且实现高效获取数据,虽然查询数据的效率有了很大的提高,但是在对数据表进行 增、删、改时为了维护数据表的索引也耗费了一定的系统资源。

     索引的创建

    在创建表的时候创建索引

    create table 表名(
            列名1 数据类新 [约束条件],
            列名2 数据类型 [约束条件],
            ......
            [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [别名] (列名n[(长度)]) [ASC | DESC];
            )engine=ENFINE_NAME;

    说明:
    UNIQUE : 可选参数,表示唯一索引;
    FULLTEXT: 可选参数,表示全文索引;
    SPATIAL: 可选参数,表示空间索引;
    INDEX 和 KEY: 用来表示字段的索引,二选一;
    别名: 可选参数,表示创建的索引名;
    列名n: 指定索引对应的字段名称;
    长度: 可选参数,表示索引的长度;
    ASC 和 DESC : 可选参数,选择升序或降序。

    普通索引

    例如在 id 上创建

    create table table_name(
    id int not null,
    name varchar(15),
    INDEX (id)
    );

    唯一索引

    create table table_name(
    id int not null,
    name varchar(15),
    UNIQUE KEY unique_id(id ASC)
    );

    其实主键也是一种唯一索引——不能有空值。

    全文索引

    InnoDB引擎不支持,MyISAM支持性能较好,一般在 char 、varchar或text的列上创建;

    create table 表名(
        列名1,
        列名2,
        ......
        FULLTEXT INDEX fullindex(列名n)
    )engine=MyISAM;

    多列索引

    若是创建单例索引,括号中列出一个列名便好;若是创建多列索引,则括号中列出相关列的列名即可。

    空间索引

    Mysql使用关键字:SPATIAL 创建空间索引,空间索引只能建立在空间数据类型上,并且相应的字段必须有非空约束。而支持空间索引存储引擎只有 MyISAM。
    Mysql空间数据类型:geometry、point、linestring、polygon。

    在已建的数据表中创建索引

    CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX  index_name ON table_name(列名[(长度)] [ASC | DESC]);

    对于普通索引可直接

    CREATE INDEX index_name ON table_name(列名);

    对于唯一索引,全文索引,空间索引 ,单列索引或多列索引使用相应的关键字创建即可。

    修改表的结构添加索引

    ALTER TABLE table_name ADD  [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name (列名[(长度)]  [ASC | DESC]);

    例如添加一个多列索引:

    ALTER TABLE table_name  ADD  INDEX index_name (列名1,列名2,...);

    查看索引

    可以从表的结构来查看索引:

    SHOW CREATE TABLE table_name;
    DESC table_name;
    SHOW COLUMNS FROM table_name;

    第一句sql语句会将 索引整合到表的创建语句中,然后将表的整个创建语句显示出来;

    其中:UNIQUE KEY 'info' ('title')  便是;

    后两句效果相同,以列表的方式给出:

    其中,对于 Field title在 Key 列有值 UNI,这表明是唯一索引。

    SHOW [INDEX | KEYS] FROM table_name;

    这句sql 语句则会将表中的所有索引的详细的列出。

    看得出 列  title 对应的索引名为 info , Non_unique 的值为 0 说明是唯一索引。

    删除索引

    DROP INDEX index_name ON table_name;

    ALTER TABLE table_name DROP INDEX  index_name;
  • 相关阅读:
    面试遇到的问题汇总
    linux系统的安装和配置
    apache重写URL时,排除静态资源
    WordPress限制游客查看文章
    Mysql主从复制读写分离
    Postgres主从
    django-rest-framework-simplejwt
    JavaWeb项目部署到Linux服务器
    Centos8.2云服务器环境安装Tomcat8.5
    java的pdf转jpg
  • 原文地址:https://www.cnblogs.com/lightandtruth/p/8447194.html
Copyright © 2011-2022 走看看