`

什么是索引?索引有哪几种?

阅读更多

索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。

索引的类型:

MySQL提供多种索引类型供选择:

(一)普通索引

    这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:

创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );

(二)唯一性索引

    这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:

创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表)
);

(三)主键

主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。

(四)全文索引

MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。全文索引可以在VARCHAR或者TEXT类型的列上创建。它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。本文下面的讨论不再涉及全文索引,要了解更多信息,请参见MySQL documentation。

(四)单列索引与多列索引

索引可以是单列索引,也可以是多列索引。下面我们通过具体的例子来说明这两种索引的区别。假设有这样一个people表:

CREATE TABLE people ( peopleid SMALLINT NOT NULL AUTO_INCREMENT, firstname CHAR(50)
NOT NULL, lastname CHAR(50) NOT NULL, age SMALLINT NOT NULL, townid SMALLINT NOT
NULL, PRIMARY KEY (peopleid) );

分享到:
评论

相关推荐

    什么是索引?如何创建索引,索引的类型

    索引 什么是索引? 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值得集合和相应的指向表中物理标识这些值得数据...索引的几种类型? 1.唯一

    mysql面试题,MySQL中有几种索引类型,可以简单说说吗?

    MySQL中有几种索引类型,可以简单说说吗? FULLTEXT :即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引...

    BAT面试突击资料.zip

    数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4...

    ORACLE重建索引总结

    快速重建索引的一种有效的办法,因为使用现有索引项来重建新索引,如果客户操作时有其他用户在对这个表操作,尽量使用带online参数来最大限度的减少索引重建时将会出现的任何加锁问题,alter index index_name ...

    数据库索引失效的几种情况

     二、索引失效的几种情况  1.如果条件中有多个字段使用or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。多条件查询用同一字段时使用or索引会生效。 注意:要想使用or,又想让索引生效,只能...

    sqlserver索引表设计数据类型选择

    该ppt详细描述sqlserver索引优化时带来的查询性能提升和更新锁开销,最后介绍表设计,字段数据类型的选择及使用适当的冗余减少表连接

    Elasticsearch-深入理解索引原理1

    1. 客户端向Node1 发送索引档请求 2. Node1 根据档ID(_id字段)计算出该档应该属于shard0,然后请求路 3. Node3在P0上执了请求

    Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:  1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个...

    MySQL索引面试题+索引优化+索引失效

    在进行索引优化时,有几个关键点需要注意。首先是选择合适的索引列,通常选择经常用于查询的列作为索引列,尽量避免使用长文本或二进制类型的列作为索引列。其次是合理设置索引的顺序,根据查询的频率和字段选择合适...

    几种索引技术的比较收集.pdf

    几种索引技术的比较收集.pdf

    这就是搜索引擎

    哪种算法效果较好? 搜索引擎缓存有几级结构?核心策略是什么? 什么是情境搜索?什么是社会化搜索?什么是实时搜索? 2. 对云计算与云存储有兴趣的技术人员 • 什么是CAP 原理?什么是ACID 原理?它们之间有什么...

    大数据底层原理和基础概念面试题30道

    1 、Hadoop是什么?它能做什么? 2 、Hadoop和MapReduce的关系是什么?...17、YARN中的资源分配分为哪几种类型?它们分别适用于哪些场景? 18、YARN中的ResourceManager和NodeManager的作用分别是什么? 。。。。。。

    数据库SQLSERVER索引

    我在这里只讨论两种SQLServer索引,即clustered索引和nonclustered索引。当考察建立什么类型的索引时,你应当考虑数据类型和保存这些数据的column。同样,你也必须考虑数据库可能用到的查询类型以及使用的最为频繁的...

    最优索引树GisT(索引树模板)

    GIST索引机制是一种适合于数据库操作的索引机制(好早就有了),前面几种索引并没有将运算结果保存起来,GIST索引机制将运算的数据统一保存。需要提供给数据库一些函数:选择,处罚、合并、分裂。将方法和数据统一...

    MySQL索引不会被用到的情况汇总

    它有以下几种创建方式: 1.创建索引 代码如下: CREATE INDEX indexName ON mytable(username(length)); 如果是 CHAR,VARCHAR 类型,length 可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定 length,...

    MySQL索引失效的几种情况汇总

    一.索引不存储null值 更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引...假如索引列TYPE有5个键值,如果有1万条数据,那么 WHERE TYPE = 1将

    oracle索引失效的总结

    oracle索引失效的总结

    mysql面试题(涉及索引、事务、锁)

    常见的几种分布式ID的设计方案 常见的数据库优化方案,在你的项目中数据库如何进行优化的 什么是索引下推 Hash索引和B+树所有有什么区别或者说优劣呢? 说说什么是最左匹配? 如何优化慢查询?(explain命令) 分库...

    MySQL索引的各种类型

    索引是数据库存储引擎用于快速查找到指定数据的一种数据结构。 可以用新华字典做类比:如果新华字典中对每个字的详细解释是数据库中表的记录,那么按部首或拼音等排序的目录就是索引,使用它可以让我们快速查找的某...

    2022年MySQL最新面试题,很全,已拿大厂 offer

    4、MySQL的binlog有有几种录入格式?分别有什么区别? 5、平时用到哪些关系型数据库和非关系数据库, 可以谈谈你对它们的理解吗? 6、可以简单说说你对MySQL的逻辑架构了解吗? 7、了解MySQL中的MVCC是什么? 8、...

Global site tag (gtag.js) - Google Analytics