MySQL基础,索引定义及在创建表的时候创建索引
索引在数据库中的作用是快速找出某个列中一个特定值的行,不使用索引的话,MySQL必须从第一条记录遍历到相关行,表越大,花费的时间越多,但是如果有索引,就能快速的到达某个位置去搜索数据文件。
工具/原料
电脑
MySQL
Navicat等可视化管理工具
索引的定义及优缺点
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 SE雉搽妤粲LECT * FROM test_1 WHERE num=1;查询结果的字段详解select_type:查询类型,可能的值:SIMPLE,PRIMARY,UNION,SUNQUERY等table:表名,按被读取的先后顺序查询type:与其他表的关系,可能的值:system,const,eq_ref,ref,range,index和Allpossible_key:搜索记录可选用的各个索引key:实际选用的索引key_len:索引按字节计算的长度,ref:行给出关联关系中另一个数据表里的数据列的名称rows:预计读出的行数extra:与关联操作相关的信息
3、创建唯一索引CREATE TABLE test_2( id INT NOT NULL, num INT NOT NULL, test_name VARCHA伊怕锱鳏R(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 te衡痕贤伎st_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查看创建的索引