mysql相关

Mysql索引:

知识点:

1.MySQL中的索引的存储类型有两种:BTREE、HASH

2.根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。

3.MySQL目前还不支持函数索引,但是支持前缀索引,即对索引字段的前N个字符创建索引。

4.索引在创建表的时候可以同时创建,也可以随时增加新的索引。

操作:(抄袭来自https://www.cnblogs.com/whgk/p/6179612.html)

格式:CREATE TABLE 表名[字段名 数据类型]  [UNIQUE|FULLTEXT|SPATIAL|...] [INDEX|KEY] [索引名字] (字段名[length])   [ASC|DESC]

|--------------------------------------|  |-----------------------------------| |------------| |---------| |---------------|    |------------|

普通创建表语句 设置什么样的索引(唯一、全文等)  索引关键字  索引名字 对哪个字段设置索引  对索引进行排序

 

创建普通索引              

      CREATE TABLE book            CREATE TABLE book

            (                     (

                   bookid INT NOT NULL,          bookid INT NOT NULL,

       bookname VARCHAR(255) NOT NULL,    bookname VARCHAR(255) NOT NULL,

       authors VARCHAR(255) NOT NULL,    authors VARCHAR(255) NOT NULL,

       info VARCHAR(255) NULL,        info VARCHAR(255) NULL,

       comment VARCHAR(255) NULL,       comment VARCHAR(255) NULL, 

       year_publication YEAR NOT NULL,     year_publication YEAR NOT NULL,

       INDEX(year_publication)         KEY(year_publication) 

      );                              );

     上面两种方式创建度可以,通过这个例子可以对比一下格式,就差不多明白格式是什么意思了。

创建唯一索引  

     CREATE TABLE t1

     (

       id INT NOT NULL,

       name CHAR(30) NOT NULL,

       UNIQUE INDEX UniqIdx(id)

     );  

     解释:对id字段使用了索引,并且索引名字为UniqIdx。

创建主键索引

      CREATE TABLE t2

      (

        id INT NOT NULL,

        name CHAR(10),

        PRIMARY KEY(id)

      );  

创建单列索引 

      这个其实就不用在说了,前面几个就是单列索引。

创建组合索引

     组合索引就是在多个字段上创建一个索引

     创建一个表t3,在表中的id、name和age字段上建立组合索引

     CREATE TABLE t3

     (

       id INT NOT NULL,

       name CHAR(30) NOT NULL,

       age INT NOT NULL,

       info VARCHAR(255),

       INDEX MultiIdx(id,name,age)

     );

解释最左前缀

     组合索引就是遵从了最左前缀,利用索引中最左边的列集来匹配行,这样的列集称为最左前缀,不明白没关系,举几个例子就明白了,例如,这里由id、name和age3个字段构成的索引,索引行中就按id/name/age的顺序存放,索引可以索引下面字段组合(id,name,age)、(id,name)或者(id)。如果要查询的字段不构成索引最左面的前缀,那么就不会是用索引,比如,age或者(name,age)组合就不会使用索引查询

创建全文索引

     全文索引可以用于全文搜索,但只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列服务。索引总是对整个列进行,不支持前缀索引,

      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;

      SHOW CREATE TABLE t4\G;

注意:在使用全文搜索时,需要借助MATCH函数,并且其全文搜索的限制比较多,比如只能通过MyISAM引擎,比如只能在CHAR,VARCHAR,TEXT上设置全文索引。比如搜索的关键字默认至少要4个字符,比如搜索的关键字太短就会被忽略掉。等等,如果你们在实验的时候可能会实验不出来。感兴趣的同学可以看看这篇文章,全文搜索的使用

创建空间索引

    空间索引也必须使用MyISAM引擎, 并且空间类型的字段必须为非空。 这个空间索引具体能干嘛我也不知道,可能跟游戏开发有关,可能跟别的东西有关,等遇到了自然就知道了,现在只要求能够创建出来。

    CREATE TABLE t5

    (

      g GEOMETRY NOT NULL,

      SPATIAL INDEX spatIdx(g)

    ) ENGINE = MyISAM;

    SHOW CREATE TABLE t5\G;

在已经存在的表上创建索引

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

 有了上面的基础,这里就不用过多陈述了。

      命令一:SHOW INDEX FROM 表名\G  

      查看一张表中所创建的索引

      SHOW INDEX FROM book\G;

为表添加索引

     就拿上面的book表来说。本来已经有了一个year_publication,现在我们为该表在加一个普通索引

     ALTER TABLE book ADD INDEX BkNameIdx(bookname(30));

使用CREATE INDEX创建索引。

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

  解释:其实就是换汤不换药,格式改变了一下而已,做的事情跟上面完全一样,做一个例子。

   在为book表增加一个普通索引,字段为authors。

  CREATE INDEX BkBookNameIdx ON book(bookname);

     SHOW INDEX FROM book\G;  //查看book表中的索引

删除索引

   前面讲了对一张表中索引的添加,查询的方法。

  添加的两种方式

    1在创建表的同时如何创建索引,

    2在创建了表之后如何给表添加索引的两种方式,

   查询的方式

   SHOW INDEX FROM 表名\G;  \G只是让输出的格式更好看

   现在来说说如何给表删除索引的两种操作。

  格式一:ALTER TABLE 表名 DROP INDEX 索引名。

很简单的语句,现在通过一个例子来看看,还是对book表进行操作,删除我们刚才为其添加的索引。

    1、删除book表中的名称为BkBookNameIdx的索引。

   ALTER TABLE book DROP INDEX BkBookNameIdx;

SHOW INDEX FROM book\G;  //在查看book表中的索引,就会发现BkBookNameIdx这个索引已经不在了

 格式二:DROP INDEX 索引名 ON 表名;

     删除book表中名为BkNameIdx的索引

     DROP INDEX BkNameIdx ON book;

     SHOW INDEX FROM book\G;

总结

  MySQL的索引到这里差不多就讲完了,总结一下我们到目前为止应该知道哪些东西

   1、索引是干嘛的?为什么要有索引?

     这个很重要,需要自己理解一下,不懂就看顶部的讲解

   2、索引的分类

   3、索引的操作

给表中创建索引,添加索引,删除索引,删除索引 

 

Beego中使用索引

自定义索引(https://www.jianshu.com/p/3f4baa497cd5)

为单个或多个字段增加索引

type User struct {

       Id int

       Name string

       Email string

} // 多字段索引

func (u *User) TableIndex() [][]string {

        return     [][]string{   [][]string{"Id", "Name"}, }

} // 多字段唯一键

func (u *User) TableUnique() [][]string {

           return [][]string{   []string{"Name", "Email"}, }

}

你可能感兴趣的:(数据库)