数据库索引

索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。

MySQL中,所有的数据类型都可以被索引。MySQL的索引有的普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。


索引可以提高查询的速度,但是会影响插入记录的速度。因为向有索引的表中插入记录时,数据库系统会按照索引进行排序。

这样就降低了插入记录的速度,插入大量记录时的速度影响更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据。插入完成后,再创建索引。

索引的分类

1、普通索引

         不加任何限制条件

2、唯一性索引

         使用UNIQUE参数

3、全文索引

         使用FULLTEXT参数,只能创建在CHAR,VARCHAR,TEXT类型的字段上,只有MyISAM存储引擎支持全文索引。

4、单列索引

         在一个字段上建立的普通索引,唯一性索引或全文索引

5、多列索引

         在多个字段上建立的普通索引,唯一性索引或全文索引

6、空间索引

         使用SPATIAL参数,只有MyISAM存储引擎支持空间索引,必须建立在空间数据类型上,且必须非空,初学者很少用到。

索引的设计原则

1、选择唯一性索引

2、为经常需要排序、分组和联合操作的字段建立索引

         如ORDER BY、GROUP BY、DISTINCT,UNION等操作的字段,特别是排序

3、为常作为查询条件的字段建立索引

4、限制索引的数目

         避免过多地浪费空间

5、尽量使用数据量少的索引

6、尽量使用前缀来索引

         如指索引TEXT类型字段的前N个字符

7、删除不再使用或者很少使用的索引。

创建索引

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。

创建索引有3种方式,这3种方式分别是

  • 创建表的时候创建索引
CREATE TABLE 表名 (属性名 数据类型 [完整约束条件],[UNIQUE|FULLTEXT|SPATIALINDEX|KEY [别名] (属性名1  [(长度)] [ASC|DESC]));

//创建普通索引
CREATE TABLE index1 (id INT, name VARCHAR(20), sex BOOLEAN, INDEX(id) );

//创建唯一性索引
CREATE TABLEindex2(id INT UNIQUE, name VARCHAR(20), UNIQUE INDEX index2_id(id ASC));

//创建全文索引
CREATE TABLEindex3 (id INT, info VARCHAR(20), FULLTEXT INDEX index3_info(info)) ENGINE=MyISAM;

//创建单列索引
CREATE TABLEindex4 (id INT, subject VARCHAR(30), INDEX index4_st(subject(10)));

//创建多列索引
CREATE TABLEindex5 (id INT, name VARCHAR(20), sex CHAR(4), INDEX index5_ns(name,sex));
//使用了第一个字段才会触发索引

//创建空间索引
CREATE TABLEindex6 (id INT, Space GEOMETRY NOT NULL, SPATIAL INDEX index6_sp(space) )ENGINE=MyISAM;


  • 在已经存在的表上创建索引
//创建普通索引
CREATE INDEX index7_id on example0(id);

//创建唯一性索引
CREATE UNIQUE INDEX index_8_id ON index8(course_id);

//创建全文索引
CREATE FULLTEXT INDEX index9_info ON index9(info);

//创建单列索引
CREATE INDEX index10_addr ON index10(address(4));

//创建多列索引
CREATE INDEX index11_na ON index11(name, address);

//创建空间索引
CREATE SPATIAL INDEX index12_line on index12(line);
  • 使用ALTER TABLE语句来创建索引。
ALTER TABLE 表名 ADD  [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名 (属性名[(长度)][ASC|DESC]);

//创建普通索引
ALTER TABLEexample0 ADD INDEX index12_name(name(20));

//创建唯一性索引
ALTER TABLEindex14 ADD UNIQUE INDEX index14_id(course_id);

//创建全文索引
ALTER TABLEindex15 ADD INDEX index15_info(info);

//创建单列索引
ALTER TABLEindex 16 ADD INDEX index16_addr(address(4));

//创建多列索引
ALTER TABLEindex17 ADD INDEX index17_na(name, address);

//创建空间索引
ALTER TABLEindex18 ADD INDEX index18_line(line);

删除索引

DROP INDEX 索引名 ON 表名;

DROP INDEX id ONindex1;

1. MySQL中索引、主键和唯一性的区别是什么?
索引建立在一个或者几个字段上。建立了索引后,表中的数据就按照索引的一定规则排列。这样可以提高查询速度。
主键是表中数据的唯一标识。不同的记录的主键值不同。例如,身份证好比主个身份证号都可以唯一的确定一个人。在建立主键时,系统会目动建一个唯一性索引。
唯一性也是建立在表中一个或者几个字段上。其目的是为了对于不同的记求,具有唯一性的字段的值是不同的。
2.表中建立了索引以后,导入大量数据为什么会很慢?
对已经建立了索引的表中插入数据时,插入一条数据就要对该记录按索引排序。内此,导入大量数据的时候速度会很慢。

解决这种情况的办法是,在没有任何索引的情况插入数据,然后建立索引。
 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值