zoukankan      html  css  js  c++  java
  • 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 才能创建主键;
  • 相关阅读:
    python类变量与成员变量,及模块中类变量共享
    python制作GUI界面---搞定软件界面编程
    pycharm运行PyQt5出现错误This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
    pycharm安装包下载慢的问题解决
    DNS隧道实验
    关于虚拟机win Server 2003只能打开百度网页其他网页都打不开??
    Python如何将决策树dot文件转化为png文件
    如何将虚拟机win7成功联网
    关于虚拟机win2003忘记登录密码(待解决)
    虚拟机kali忘记密码后问题解决&&kali用桥接模式成功联网
  • 原文地址:https://www.cnblogs.com/firebet/p/12199587.html
Copyright © 2011-2022 走看看