数据库索引

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

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.表中建立了索引以后,导入大量数据为什么会很慢?
对已经建立了索引的表中插入数据时,插入一条数据就要对该记录按索引排序。内此,导入大量数据的时候速度会很慢。

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

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据库索引是一种数据结构,用于加速数据库查询操作。它是在表创建的一种特殊数据结构,用于快速查找特定行的位置。索引的作用类似于图书馆的书目索引,可以快速找到所需的书籍。 优点: 1. 提高查询效率:索引可以大大提高查询的效率,因为它允许数据库引擎更快地找到需要的数据行。 2. 减少数据扫描:如果没有索引数据库引擎将不得不扫描整个表来找到匹配的数据行。有了索引数据库引擎可以使用快速索引查找算法来避免全表扫描,从而减少查询时间。 3. 加速排序:如果查询包括排序操作,有索引的情况下排序时间将会更快。 4. 提高数据完整性:可以使用索引来强制唯一性约束和外键约束,从而提高数据完整性。 缺点: 1. 增加存储空间:索引需要占用磁盘空间。如果表非常大,可能需要大量的磁盘空间来存储索引,从而增加存储成本。 2. 增加写入操作的成本:每当对表进行插入、更新或删除操作时,所有相关的索引都必须进行更新。因此,索引会增加写操作的成本。 3. 延迟查询优化:如果数据库的数据经常变化,优化查询计划的过程可能需要更长的时间,因为数据库引擎必须不断地重新评估查询计划,以确保使用最有效的索引。 4. 可能会导致锁定:在某些情况下,使用索引可能会导致数据库引擎对表进行锁定,从而影响其他会话的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬比我。

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值