MySQL unique index vs. index speed

MySQL unique index vs. index speed

在MySQL中索引是非常重要的,可以大幅度提升查询效率。但不同的索引类型会对速度有所影响。本文将主要介绍MySQL中unique index和普通index的区别以及对查询速度的影响。

阅读更多:MySQL 教程

索引的基础概念

索引是数据结构,帮助数据库系统高效的检索数据。MySQL中常用的索引类型有primary key、unique index、index、fulltext,其中primary key和unique index可以唯一标识每个记录,而index和fulltext则不可以。

Unique index vs. index

UNIQUE索引和INDEX的区别,大家一般都理解,因为名字都不一样。但是细节的差别和优势,就需要细心了解了。下面将从以下几个方面详细解释它们之间的不同。

唯一值

UNIQUE索引中,列值必须唯一,但是Null可以重复出现。而在INDEX中,值可以重复出现。

性能

因为UNIQUE的唯一性,它的查询性能要略高于INDEX。但三个内部数据结构B-tree,Hash和R-Tree,都支持索引键值的哈希访问方式,在内存小而数据量巨大的时候,使用HASH较快而且存储使用倍数小于BTREE,因为HASH 内部信息比较少。

在执行查询时,如果可以使用上UNIQUE索引就能更快地执行查询了。但是,如果查询的条件中某些列并不是UNIQUE的,使用INDEX也可以提高查询效率,这与查询中的where子句有关。

SELECT * FROM student WHERE name='tom' AND age=20;

假设有两个索引:(name, age)name。如果name=’tom’的记录很少,那么使用(name, age)索引的效率会更高,因为它可以过滤掉一部分数据。而对于name索引,必须扫描所有数据才能找到对应的记录,效率会低一些。

索引长度

UNIQUE索引比INDEX索引的长度长,以VARCHAR类型为例:

假设有2条记录:

AAA,1111111111
AAA,1111111112

如果使用UNIQUE(name, num)索引,则整个索引长度是20,而如果使用(name)(num)索引,则总共只有11个字符数,效率会高一些。

索引类型的选择

在实际开发中,应该根据实际情况选择不同的索引方式。

如果某一列存在重复值,或者该列在查询中的where子句中,那么使用INDEX索引。

如果某一列的值都是不同的,可以使用UNIQUE索引或PRIMARY KEY索引。

如果某一列需要进行全文索引,可以使用FULLTEXT索引。

索引的创建

在MySQL中索引使用create index命令创建。下面分别对unique index和index进行示例说明。

创建unique index

创建student表,包含namenum两列:

CREATE TABLE student (
    name VARCHAR(20),
    num VARCHAR(20)
);

创建UNIQUE(name, num)索引:

CREATE UNIQUE INDEX index_name ON student(name, num);

如果在插入或更新数据时违反了唯一性限制,MySQL会在执行插入或更新操作时报错。

创建index

创建score表,包含namesubjectscore三列:

CREATE TABLE score (
    name VARCHAR(20),
    subject VARCHAR(20),
    score INT(3)
);

创建(name, subject)(score)索引:

CREATEINDEX index_name ON score(name, subject);
CREATE INDEX index_score ON score(score);

总结

在MySQL中,unique index和普通index对查询速度有所影响。唯一值、性能、索引长度等方面都有所不同。开发者应该根据实际情况选择不同的索引方式,在创建索引时也需要注意唯一性限制。索引的正确创建和使用,可以大幅度提升查询效率,提高系统的整体性能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程