MySQL数据库的索引的操作

1.什么是索引,为什么使用索引:

    1.1什么是索引:

        数据库对象索引其实和书的目录非常类似

        索引是创建在数据库对象上的,由表的一个字段或多个字段生成的键组成

        这些键存储在数据结构(B-树或哈希表)中

    1.2索引类型:

        根据存储类型索引分为乙型树索引(BTREE)和哈希索引(HASH)

        InnoDB的的和MyISAM数据的存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引

        MySQL的的支持6种索引:普通索引,唯一索引,全文索引,单列索引,多列索引和空间索引

    1.3为什么使用索引:

        索引可以提高查询速度,但是过多的索引则会占据许多磁盘空间

    1.4哪些情况适合,哪些情况不适合创建索引:

        1.4.1适合的情况:

            经常被查询的字段,即在WHERE子句中出现的字段

            在分组的字段中,即在GROUP BY子句中出现的字段

            存在依赖关系的子表和父表之间的联合查询,即主键或外键字段

            设置唯一完整性约束的字段

        1.4.2不适合的情况:

            在查询中很少被使用的字段

            拥有许多重复的字段

2.创建和查看索引:

    在MySQL中,可以通过三种方式创建索引,分别为创建表时创建索引,在已经存在的表上创建索引并通过SQL语句ALTER TABLE创建索引

    2.1创建和查看普通索引:

        2.1.1创建表时创建普通索引:

            CREATE TABLE table_name(

                属性名数据类型,

                属性名数据类型,

                ......

                属性名数据类型,

                INDEX | KEY [索引名](属性名1 [(长度)] [ASC | DESC])

            );

            INDEX或KEY参数用来指定字段为索引,“长度”参数用来指定索引的长度

            不同的存储引擎定义了表的最大索引数和最大索引长度

            MySQL的所支持的存储引擎对每个表至少支持16个索引,总索引长度至少为256字节

            在创建完索引之后可以执行SQL语句EXPLAIN查看索引是否被使用,例如:

            EXPLAIN SELECT * FROM t_dept WHERE deptno = 1;

            由于possible_keys和密钥字段处的值都为索引名,这说明索引存在而且开始使用

            也可以通过SHOW CREATE TABLE table_name;查看索引是否被创建

        2.1.2在已经存在的表上创建普通索引:

            CREATE INDEX索引名

                ON表名(属性名[(长度)] [ASC | DESC]);

        2.1.3通过SQL语句ALTER TABLE创建普通索引:

            ALTER TABLE table_name

                ADD INDEX | KEY索引名(属性名[(长度)] [ASC | DESC]);

    2.2创建和查看唯一索引:

        唯一索引就是在创建索引时限制索引的值必须是唯一的

        MySQL的中根据创建索引方式,可以分为自动索引和手动索引

        自动索引:指在数据库表里设置完整性约束时,该表会系统自动创建索引

        手动索引:指手动在表上创建索引

        2.2.1创建表时创建唯一索引:

            CREATE TABLE table_name(

                属性名数据类型,

                属性名数据类型,

                ......

                属性名数据类型,

                UNIQUE INDEX | KEY [索引名](属性名1 [(长度)] [ASC | DESC])

            );

        2.2.2在已经存在的表上创建唯一索引:

            CREATE UNIQUE INDEX索引名

                ON表名(属性名[(长度)] [ASC | DESC]);

        2.2.3通过SQL语句ALTER TABLE创建唯一索引:

            ALTER TABLE table_name

                ADD UNIQUE INDEX | KEY(属性名[(长度)] [ASC | DESC]);

    2.3创建和查看全文索引:

        全文索引主要关联在数据类型为CHAR,VARCHAR,和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型字段

        只能在存储引擎为MyISAM的数据库表上创建全文索引

        全文索引的搜索执行方式为不区分大小写,如果有关联二进制数据类型则区分大小写

        2.3.1创建表时创建全文索引:

            CREATE TABLE table_name(

                属性名 数据类型,

                属性名 数据类型,

                ... ...

                属性名 数据类型,

                FULLTEXT INDEX|KEY [索引名] (属性名1 [(长度)] [ASC|DESC])

            );

        2.3.2在已经存在的表上创建全文索引:

            CREATE FULLTEXT INDEX 索引名

                ON 表名 (属性名 [(长度)] [ASC]DESC);

        2.3.3通过SQL语句ALTER TABLE创建全文索引:

            ALTER TABLE table_name

                ADD FULLTEXT INDEX|KEY [索引名] (属性名1 [(长度)] [ASC|DESC]);

    2.4创建和查看多列索引:

        指在创建索引时,所关联的字段不是一个字段,而是多个字段

        查询时,只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用

        2.4.1创建表时创建多列索引:

            CREATE TABLE table_name(

                属性名 数据类型,

                属性名 数据类型,

                ... ...

                属性名 数据类型,

                INDEX|KEY [索引名] (属性名1 [(长度)] [ASC|DESC],

                                                ......

                                                属性名n [(长度)] [ASC | DESC])

            );

        2.4.2在已经存在的表上创建多列索引:

            CREATE TABLE table_name

                ON表名(属性名[(长度)] [ASC | DESC],

                                ......

                                属性名n [(长度)] [ASC | DESC]);

        2.4.3通过SQL语句ALTER TABLE创建多列索引:

            ALTER TABLE table_name

                ADD INDEX | KEY索引名(属性名[(长度)] [ASC | DESC],

                                                        ......

                                                       属性名n [(长度)] [ASC | DESC]);

3.删除索引:

    DROP INDEX index_name

        ON table_name;

猜你喜欢

转载自blog.csdn.net/qq_38386085/article/details/80647330