ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

*MYSQL--索引*

2026/9/21 23:14:26 拓冰建站 浏览量
*MYSQL--索引*

一:介绍

        在MYSQL当中,索引的使用类似于书当中目录的作用,索引的使用能够让查询更加的迅速,比方说搜索mysql这个单词的时候,可以先从首字母为m开头的字母进行查找,这样就大大减少了搜索的时间,而不是从头到尾进行搜索,提高查询的速度

二:类型

        主要分为两大类,一种是根据底层的结构进行区分的(HASH索引,和B-TREE索引),另外一种是根据功能进行区分的;

        1.按照底层数据结构区分

        1>HASH索引:

        HASH索引实际上是根据哈希表的一种索引结构,通过在刚开始的时候,将索引列的值通过哈希算法(f())的方式,将其转化为哈希值.之后如果需要查找,再通过这个哈希值进行查找即可

        2>BTREE索引:

        一种树形结构的索引,从上(树根)往下(分支)不断缩小范围进行相应的查找

        2.按照功能进行区分

        1>单列索引:

                ①普通索引
                ②唯一索引
                ③主键索引

        2>组合索引

        3>全文索引

        4>空间索引

三:依据功能区分讲解:

        1.单列索引(仅仅只包含一个列,但是一个表当中可以有多个的单列索引):

        1>普通索引:

        Ⅰ介绍.

        MYSQL当中最基本的索引类型,无限制,允许在定义索引的列种加入空值以及重复值,仅仅是为了加快查询速度

        Ⅱ 操作.
	添加方式一:直接在创建表的时候添加索引create table emp1(id int,name VARCHAR(20),salary int,INDEX index_id(id)  );添加方式二:创建表之后进行直接添加create index indexname on tablename(columnname);create index index_salary on emp1(salary);添加方式三:通过修改表结构进行添加索引   -- 推荐alter table tablename add index indexname(columnname);alter table emp1 add index index_name(name);删除索引操作:一:drop index 索引名 on 表名二:alter table 表明 drop index 索引名

        2>唯一索引:

        Ⅰ 介绍:

        唯一索引跟普通索引相似,仅仅只有在本索引列上,数值必须是不同的,也可以有空值,但是如果是组合索引,列值的组合必须是唯一的

        Ⅱ 操作:
-- 单列索引添加方式一:create table emp1(id int,name VARCHAR(20),salary int,unique index_id(id)  );添加方式二:创建表之后进行直接添加create unique index indexname on tablename(columnname);create unique index index_salary on emp1(salary);添加方式三:通过修改表结构进行添加索引   -- 推荐alter table tablename add unique index indexname(columnname);alter table emp1 add unique index index_name(name);删除方式:一:drop index 索引名 on 表名二:alter table 表明 drop index 索引名alter table emp1 drop index index_salary;	alter table emp1 drop index index_id;	

        3>主键索引 :

        Ⅰ 介绍:

        主键索引,顾名思义,在创建表的时候,针对某一个列添加的主键之后,系统会自动对其添加主键索引(PRIMARY KEY) 主键索引不允许出现重复值以及NULL值

        2.组合索引:

                1>介绍:

                组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是复合普通索引,还是复合唯一索引

                2>操作:

组合索引:组合索引也叫做是复合索引,指的是在建立索引的时候使用了多个的字段.比如使用ID和姓名一起建立索引,同样的可以设置是普通索引,还是唯一索引语法:复合普通索引create index indexname on tablename(name1,name2....);create index index_id_name on emp1(id,name);语法:创建唯一索引create unique index indexname on tablename(name1,name2);create unique index index_id_name on emp1(id,name);索引的删除:alter table tablename drop index indexname;

                3>TIPS:

                1.需要注意的是,如果使用复合唯一索引,那么仅仅当设置的值全部都重复出现,是一模一样的,才会出错误,其他情况下,只有一个索引列不一样也是正确的;

                2.同时,对于复合索引设置的时候,也要注意设置的先后顺序,对于查询也是有一定影响的

	select * from emp1 where name = '张三';select * from emp1 where id = 1001;select * from emp1 where id=1001 and name='张三';select * from emp1 where name ='张三' and id =1001;*前提,设置的复合唯一索引(id,name)对于1进行查询的时候,不会使用复合唯一索引查询,因为没有提供设置的第一个唯一索引---id
而对于2,3都能够使用设置的复合唯一索引进行快速查询即便是对于4,因为MYSQL系统会自动对其进行一定的优化,因此我们可以理解为3,4两个方式在mysql当中的作用是一样的

        3.全文索引

          1.介绍

            1.关键词:fulltext

            2.跟之前所学习的关键字like很像,全文索引主要是用来寻找文本当中的关键字,而不是直接跟索引当中的值进行比较,更像是一个搜索引擎,是以相似度为基本的查询,而不是简单的where语句的参数匹配查询
            3.但是跟like查询不一样的是,like的查询适用于对于数据量比较小的,而全文索引更加适用于大量级别的文本查询,查询速度相比于like的文本查询快了几个数量级!但是全文索引的查询可能会存在一些的精度问题

           2.操作:

创建全文索引的方法一:alter table tablename add fulltext fulltextname(var1,var2....);示例:对于表test添加的content添加全文索引alter table test add fulltext full_content(content);二:create fulltext index indexname on tablename(var1...);使用全文索引关键字:match(var1) against(查询内容);示例:查询表test当中所有包含yo的内容,使用全文查询select * from test match(content) against('yo');  -- 查询不到,因为查询的最小搜索长度是3select * from test match(content) against('you'); -- 可以查询到,满足最小的查询长度

                3.TIPS:

                如果想要通过全文索引查询,必须要注意的是全文索引的两个量(最小搜索长度以及最大搜索长度) 大于,或者是小于这个范围的搜索内容都无法搜索到!
        

		可以使用show variables like '%ft%';  查看相应的数值大小

         4:空间索引:

        1.介绍:

        1>MYSQL仅仅在5.7之后才支持空间索引
        2>空间索引针对的是空间数据类型的字段建立的索引,MYSQL中的空间数据类型主要有4种,geometry,point,linestring,polygon
        3>并且在创建空间索引的时候,这个索引列必须是not null 类型的 

        2.操作:

geometry  含义:空间数据  说明:任何一种空间类型point  含义:点  说明:坐标值lineString  含义:线  说明:有一系列点连接而成的polygon  含义:多边形  说明:由多条线组成操作:create table spa_0(id int primary key auto_increment,  -- 'id'name VARCHAR(20), -- 门店名称point_1 geometry not null,  	-- 经纬度表示 
spatial key sap_index(point_1));

                                                                OVER!感谢观看!