MySQL基础,索引定义及在创建表的时候创建索引
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查看创建的索引
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:与关联操作相关的信息
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查看创建的索引
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查看创建的索引
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查看创建的索引
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查看创建的索引
7、创建空间索引(注意,空间索引仅能在MyISAM引擎中使用)
CREATE TABLE test_6(
aaa GEOMETRY NOT NULL,
SPATIAL key SpaIdx(aaa)
) ENGINE=MyISAM;
查看创建的表的表结构
SHOW CREATE TABLE test_6;
使用Navicat查看创建的索引