MySQL 约束、表连接、表关联、索引 (5)

MySQL 约束、表连接、表关联、索引

五、索引

主要内容如下:

1、索引的概念

2、普通索引

3、唯一索引

4、主键索引

5、全文索引

6、删除、禁用索引

7、设计索引的原则

关于索引,推荐的学习链接:

(大牛)

 

1、索引的概念

索引是数据库中用来提高查询性能的最常用工具。

所有MySQL列类型都可以被索引,对相关列使用索引是提高SELECT操作性能的最佳途径。索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。

在使用以下操作符时,都会用到相关列上的索引:

>、<、>=、<=、<>、in、 between

like \'pattern\'(pattern不能以通配符开始,即通配符不能放前面,即使放在了前面,索引也无效)

注:索引的值因为不断改变,所以是它需要维护的。如果数据量较少,建议不用索引。

2、normal 普通索引(第一种索引)

方式一:直接创建索引:

语法,注意加():

CREATE INDEX 索引名 ON 表名(列名[(length)]…); 

举例:

MySQL 约束、表连接、表关联、索引

然后,我们在表中可以看到新创建的索引:(我们可以在这个navicat的可视化界面中修改索引类型)

MySQL 约束、表连接、表关联、索引

方式二:修改表时添加索引

语法:

ALTER TABLE 表名 ADD INDEX [索引名] (列名[(length)]…);  

方式三:创建表的时候指定索引:

CREATE TABLE 表名 ( 表名 (

[...],

INDEX [索引名] (列名[(length)]…); 

注意:如果要创建索引的列的类型是CHAR、VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定length。 

3、unique 唯一索引(第二种索引)

这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都必须唯一。例如可以将身份证号作为索引。

创建方式和上方的普通索引类似。即:将普通索引的“index”改为“unique index”。 

4、主键索引(一种特殊的唯一索引)

主键是一种特殊的唯一索引,一般在创建表的时候指定。在 MYSQL 中,当你建立主键时,主键索引同时也已经建立起来了,不必重复设置。

记住:一个表只能有一个主键,也即只有一个主键索引。 

5、fulltext index全文索引(第三种索引)

MySQL从3.2版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为fulltext index。

MySQL5.0版本只有MyISAM存储引擎支持fulltext index,并且只限于CHAR、VARCHAR和TEXT类型的列上创建。

注:全文索引维护起来很吃力,所以了解即可。

创建方式和上方的普通索引类似。即:将普通索引的“index”改为“fulltext index”。 

6、删除、禁用索引

一般使用“删除”,不使用“禁用”。

删除索引:

语法:

DROP INDEX 索引名 ON 表名 

对于MyISAM表在做数据大批量导入时,它会边插入数据边建索引。所以为了提高执行效率,应该先禁用索引,在完全导入后,再开启索引。而InnoDB表对索引都是单独处理的,无需禁用索引。

禁用索引:

ALTER TABLE 表名 DISABLE KEYS; 

打开索引:

ALTER TABLE 表名 ENABLE KEYS; 

7、设计索引的原则

最适合索引的列是出现在WHERE子句中的列,或连接子句(on语句)中指定的列,而不是出现在SELECT后的列。

索引列的值中,不相同的数目越多,索引的效果越好。

使用短索引:对于CHAR和VARCHAR列,只用它的一部分来创建索引,可以节省索引空间,也会使查询更快捷。

如:CREATE INDEX part_of_name ON employees(name(10));  这个句子中指定的length长度为10,就是使用短索引,也就是说取name的前十个字符。

利用最左前缀。

根据搜索的关键字建立多列索引。

不要过度索引。维护索引需要成本。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypzpy.html