• MySQL:索引


    建表时创建索引

    普通索引

    -- 在book表中的year_publication字段上建立普通索引
    CREATE TABLE book
    (
      bookid              INT NOT NULL,
      bookname            VARCHAR(255) NOT NULL,
      authors             VARCHAR(255) NOT NULL,
      info                VARCHAR(255) NULL,
      comment             VARCHAR(255) NULL,
      year_publication    YEAR NOT NULL,
      INDEX(year_publication)
    );
    
    -- 使用EXPLAIN语句查看索引是否正在使用
    explain select * from book where year_publication=1990;
    

    唯一索引

    -- 创建一个表t1,在表中的id字段上使用UNIQUE关键字创建唯一索引
    CREATE TABLE t1
    (
      id   INT NOT NULL,
      name CHAR(30) NOT NULL,
      UNIQUE INDEX UniqIdx(id)
    );
    

    单列索引

    -- 创建一个表t2,在表中的name字段上使用创建单列索引
    CREATE TABLE t2
    (
      id   INT NOT NULL,
      name CHAR(50) NULL,
      INDEX SingleIdx(name(20))
    );
    

    组合索引

    -- 创建表t3,在表中的id,name和info字段上建立组合索引
    CREATE TABLE t3
    (
      id    INT NOT NULL,
      name  CHAR(30) NOT NULL,
      age   INT NOT NULL,
      info  VARCHAR(255),
      INDEX MultiIdx(id, name, info(100))
    );
    

    全文索引

    -- 创建表t4,在表中的info字段上建立全文索引
    CREATE TABLE t4
    (
      id    INT NOT NULL,
      name  CHAR(30) NOT NULL,
      age   INT NOT NULL,
      info  VARCHAR(255),
      FULLTEXT INDEX FullTxtIdx(info)
    ) ENGINE=MyISAM;
    

    空间索引

    -- 创建表t5,在空间类型为GEOMETRY的字段上创建空间索引
    CREATE TABLE t5 ( 
    	g GEOMETRY NOT NULL, 
    	SPATIAL INDEX spatIdx ( g ) 
    ) ENGINE = MyISAM;
    

    ALTER TABLE

    格式:ALTER TABLE 表名 ADD[UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [索引名] (索引字段名)[ASC|DESC]

    普通索引

    -- 在book表中的bookname字段上建立名为BkNameIdx的普通索引
    ALTER TABLE book ADD INDEX BkNameIdx ( bookname ( 30 ) );
    

    唯一索引

    -- 在book表的bookId字段上建立名称为UniqidIdx 的唯一索引
    ALTER TABLE book ADD UNIQUE INDEX UniqidIdx ( bookId );
    

    单列索引

    -- 在book表的comment字段上建立单列索引
    ALTER TABLE book ADD INDEX BkcmtIdx ( comment(50) );
    

    组合索引

    -- 在book表的authors和info字段上建立组合索引
    ALTER TABLE book ADD INDEX BkAuAndInfoIdx ( authors(20),info(50) );
    

    全文索引

    -- 创建表t6,在t6表上使用ALTER TABLE创建全文索引
    -- 首先创建表t6,注意修改ENGINE参数为MyISAM,MySQL默认引擎InnoDB不支持全文索引
    CREATE TABLE t6
    (
      id    INT NOT NULL,
      info  CHAR(255)
    ) ENGINE=MyISAM;
    --使用ALTER TABLE语句在info字段上创建全文索引:
    ALTER TABLE t6 ADD FULLTEXT INDEX infoFTIdx ( info );
    

    空间索引

    -- 创建表t7,在t7的空间数据类型字段g上创建名称为spatIdx的空间索引
    CREATE TABLE t7 ( g GEOMETRY NOT NULL )ENGINE=MyISAM;
    -- 使用ALTER TABLE在表t7的g字段建立空间索引,
    ALTER TABLE t7 ADD SPATIAL INDEX spatIdx(g);
    

    CREATE INDEX

    格式:CREATE [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] 索引名称 ON 表名(创建索引的字段名[length])[ASC|DESC]

    普通索引

    -- 在book表中的bookname字段上建立名为BkNameIdx的普通索引
    CREATE INDEX BkNameIdx ON book(bookname);
    

    唯一索引

    -- 在book表的bookId字段上建立名称为UniqidIdx 的唯一索引
    CREATE UNIQUE INDEX UniqidIdx  ON book ( bookId );
    

    单列索引

    -- 在book表的comment字段上建立单列索引
    CREATE INDEX BkcmtIdx ON book(comment(50) );
    

    组合索引

    -- 在book表的authors和info字段上建立组合索引
    CREATE INDEX BkAuAndInfoIdx ON book ( authors(20),info(50) );
    

    全文索引

    -- 删除表t6,重新建立表t6,在t6表中使用CREATE INDEX语句,在CHAR类型的info字段上创建全文索引
    drop table t6;
    
    CREATE TABLE t6
    (
    id    INT NOT NULL,
    info  CHAR(255)
    ) ENGINE=MyISAM;
    
    CREATE FULLTEXT INDEX ON t6(info);
    

    空间索引

    -- 删除表t7,重新创建表t7,在t7表中使用CREATE INDEX语句,在空间数据类型字段g上创建名称为spatIdx的空间索引
    -- 首先删除表t7,并重新建立该表
    drop table t7;
    
    CREATE TABLE t7 ( g GEOMETRY NOT NULL )ENGINE=MyISAM;
    
    -- 使用CREATE INDEX语句在表t7的g字段建立空间索引,
    CREATE SPATIAL INDEX spatIdx ON t7 (g);
    

    查看索引

    show index from table_name;
    show keys from table_name;
    

    删除唯一索引

    -- 删除book表中的名称为UniqidIdx的唯一索引
    ALTER TABLE book DROP INDEX UniqidIdx;
    

    删除组合索引

    -- 删除book表中名称为BkAuAndInfoIdx的组合索引
    DROP INDEX BkAuAndInfoIdx ON book;
    

    ALTER TABLE和CREATE INDEX的区别

    1. CREATE INDEX必须提供索引名,对于ALTER TABLE,将会自动创建,如果你不提供;
    2. CREATE INDEX一个语句一次只能建立一个索引,ALTER TABLE可以在一个语句建立多个,如:
    ALTER TABLE Student ADD PRIMARY KEY (ID), ADD INDEX (Name,Info);
    
    1. 只有ALTER TABLE 才能创建主键;
  • 相关阅读:
    Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方案
    Android使用Fragment来实现TabHost的功能(解决切换Fragment状态不保存)以及各个Fragment之间的通信
    接口的作用
    Android中Service(服务)详解
    跟 Task 有关的 Intent对象中设置的Flag
    android onNewIntent
    [Android]如何导入已有的外部数据库
    android的文件操作
    MVC 数据验证
    Html辅助方法 之 Form表单标签
  • 原文地址:https://www.cnblogs.com/firebet/p/12199587.html
Copyright © 2020-2023  润新知