MySQL基础,索引定义及在创建表的时候创建索引

2025-10-22 01:10:34

1、索引的优点:

1.通过创建唯一索引,可以保证数据库每一行数据的唯一性

2.可以大大提高查询速度

3.可以加速表与表的连接

4.可以显著的减少查询中分组和排序的时间。

2、索引的缺点:

1.创建索引和维护索引需要时间,而且数据量越大时间越长

2.创建索引需要占据磁盘的空间,如果有大量的索引,可能比数据文件更快达到最大文件尺寸

3.当对表中的数据进行增加,修改,删除的时候,索引也要同时进行维护,降低了数据的维护速度

1、索引的分类:

1.普通索引(Normal):基本索引类型,允许在定义索引的列里插入空值或重复值。

2.唯一索引(Unique):索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值

3.单列索引:只包含一个列的索引,一个表中可以有多个

4.组合索引:包含多个列的索引,查询条件包含这些列的最左边的字段的时候,索引就会被引用,遵循最左缀原则

5.全文索引(Full Text):在定义的值中支持全文查找,允许空值和重复值,可以在CHAR,VARCHAR或者TEXT字段类型上创建,仅支持MyISAM存储引擎

6.空间索引:针对空间数据做的索引,支持的数据类型有4种,分别是GEOMETRY,POINT,LINESTRING和POLYGON。创建空间索引的列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎

2、索引的设计原则

1.不是越多越好

2.常更新的表越少越好

3.数据量小的表最好不要建立索引

4.不同的值比较多的列才需要建立索引

5.某种数据本身具备唯一性的时候,建立唯一性索引,可以保证定义的列的数据完整性,以提高查询熟度

6.频繁进行排序或分组的列(group by或者是order by)可以建立索引,提高搜索速度

7.经常用于查询条件的字段应该建立索引

1、创建普通索引CREATE TABLE test_1(        id INT NOT NULL,        num INT NOT NULL,        test_name VARCHAR(50) NOT NULL,        INDEX(num));

查看创建的表的表结构SHOW CREATE TABLE test_1;

使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

2、使用EXPLAIN查看索引是否使用(注意要先往表中插入相应的数据,至少两条)

EXPLAIN SELECT * FROM test_1 WHERE num=1;

查询结果的字段详解

select_type:查询类型,可能的值:SIMPLE,PRIMARY,UNION,SUNQUERY等

table:表名,按被读取的先后顺序查询

type:与其他表的关系,可能的值:system,const,eq_ref,ref,range,index和All

possible_key:搜索记录可选用的各个索引

key:实际选用的索引

key_len:索引按字节计算的长度,

ref:行给出关联关系中另一个数据表里的数据列的名称

rows:预计读出的行数

extra:与关联操作相关的信息

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

3、创建唯一索引

CREATE TABLE test_2(        id INT NOT NULL,        num INT NOT NULL,        test_name VARCHAR(50) NOT NULL,        UNIQUE INDEX UniqIdx(id));

查看创建的表的表结构

SHOW CREATE TABLE test_2;

使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

4、创建单列索引CREATE TABLE test_3(        id INT NOT NULL,        num INT NOT NULL,        test_name VARCHAR(50) NOT NULL,        INDEX SingleIdx(id));

查看创建的表的表结构

SHOW CREATE TABLE test_3;

使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

5、创建组合索引

CREATE TABLE test_4(

        id INT NOT NULL,

        num INT NOT NULL,

        test_name VARCHAR(50) NOT NULL,

        INDEX MultiIdx(id,num)

);查看创建的表的表结构SHOW CREATE TABLE test_4;使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

6、创建全文索引(注意,全文索引仅能在MyISAM引擎中使用)

CREATE TABLE test_5(

        id INT NOT NULL,

        num INT NOT NULL,

        title VARCHAR(50) NOT NULL,

        info TEXT NOT NULL,

        FULLTEXT INDEX FullIdx(info)

) ENGINE=MyISAM;

查看创建的表的表结构

SHOW CREATE TABLE test_5;

使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

7、创建空间索引(注意,空间索引仅能在MyISAM引擎中使用)

CREATE TABLE test_6(

        aaa GEOMETRY NOT NULL,

        SPATIAL key SpaIdx(aaa)

) ENGINE=MyISAM;

查看创建的表的表结构

SHOW CREATE TABLE test_6;

使用Navicat查看创建的索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

MySQL基础,索引定义及在创建表的时候创建索引

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢