MySQL数据库基础之索引相关知识点整理

数据库对象索引的出现,除了可以提高数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性。

MySQL支持6种索引:普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。

以下情况适合创建索引:

  • 经常被查询的字段,即在WHERE子句种出现的字段
  • 在分组的字段,即在GROUP BY子句中出现的字段
  • 存在依赖关系的子表和父表之间的联合查询,即主键或外键字段
  • 设置唯一完整性约束的字段

以下情况,不适合创建索引

  • 在查询中很少被使用的字段
  • 拥有许多重复值的字段

索引的操作包括创建索引、查看索引和删除索引。

创建和查看普通索引

所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制)。该类型的索引可以创建在任何数据类型的字段上。

语法形式如下:

创建表时创建普通索引

CREATE TABLE table_name (
    属性名 数据类型,
    属性名 数据类型,
    ...
    属性名 数据类型
    INDEX|KEY 【索引名】(属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】 )
)

在已经存在的表上创建普通索引

CREATE INDEX 索引名 ON 表名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

通过SQL语句ALTER TABLE创建普通索引

ALTER TABLE table_name ADD INDEX|KEY 索引名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

创建和查看唯一索引

所谓唯一索引,就是在创建索引时,限制索引的值必须时唯一的。通过该类型的索引可以更快速地查询某条记录。

根据创建索引方式,可以分为自动索引和手动索引。

当表中的某个字段被设置成主键或唯一完整性约束时,系统就会自动创建关联该字段的唯一索引。

语法形式如下:

创建表时创建唯一索引

CREATE TABLE table_name (
    属性名 数据类型,
    属性名 数据类型,
    ...
    属性名 数据类型,
    UNIQUE INDEX|KEY 索引名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)
)

在已经存在的表上创建唯一索引

CREATE UNIQUE INDEX 索引名 ON 表名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

通过SQL语句ALTER TABLE创建唯一索引

ALTER TABLE table_name ADD UNIQUE INDEX|KEY 索引名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

创建和查看全文索引

全文索引主要关联在数据类型为CHAR、VARCHAR和TEXT的字段上,以便能够更加快速地查询数据量较大的字符串类型的字段。

在默认情况下,全文索引得搜索执行方式为不区分大小写,如果全文索引所关联得字段为二进制数据类型,则以区分大小写得搜索方式执行。

语法形式如下

创建表时创建全文索引

CREATE TABLE table_name (
    属性名 数据类型,
    属性名 数据类型,
    ...
    属性名 数据类型,
    FULLTEXT INDEX|KEY 索引名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)
)

在已经存在得表上创建全文索引

CREATE FULLTEXT INDEX 索引名 ON 表名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

通过SQL语句ALTER TABLE创建全文索引

ALTER TABLE table_name ADD FULLTEXT INDEX|KEY 索引名 (属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】)

创建和查看多列索引

所谓多列索引,是指在创建索引时,所关联得字段不是一个字段,而是多个字段。虽然可以通过所关联得字段进行查询,但是只有查询条件中使用了所关联字段中得第一个字段,多列索引才会被使用。

语法形式如下

创建表时创建多列索引

CREATE TABLE table_name (
    属性名 数据类型,
    属性名 数据类型,
    ...
    属性名 数据类型,
    INDEX|KEY 索引名  (
        属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
        属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
        ...
        属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
        )
)

在已经存在得表上创建多列索引

CREATE INDEX 索引名
    ON 表名 (
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
            ...
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
        )

通过SQL语句ALTER TABLE创建多列索引

ALTER TABLE table_name 
    ADD INDEX|KEY 索引名 (
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
            ...
            属性名【索引所关联的字段的名称】 (长度【可选】) ASC|DESC【可选,排序方式,升|降】,
        )

删除索引

DROP INDEX|KEY 索引名 ON table_name

原创文章,作者:ZERO,如若转载,请注明出处:https://www.edu24.cn/course/mysql-index.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ZEROZERO
上一篇 2020年7月7日
下一篇 2020年7月13日

相关推荐

  • MyBatis配置之typeHandler类型处理器

    typeHandler类型处理器作用 MyBatis在预处理语句(PreparedStatement)中设置一个参数时,或者从结果集(ResultSet)中取出一个值时,都会用注册…

    2022年4月20日
    1.2K
  • JAVA学习路线之夯实基础

    第一章 开发环境 JDK(Java SE Development Kit),Java标准版开发包,提供编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行环…

    2020年1月14日
    1.7K
  • 如何判断一个对象为数组

    使用 instanceof 操作符 原理 instanceof 的内部机制是通过判断对象的原型链中是不是能找到类型的 prototype。 使用 instanceof 判断一个对象…

    2020年7月3日
    1.3K
  • Java自学之抽象类与接口

    面向对象程序设计中,类继承的主要作用的扩充已有类的功能。子类可以根据自己的需要选择是否要覆写父类中的方法,所以一个设计完善的父类是无法对子类做出任何强制性的覆写约定。为了解决这样的…

    2020年12月7日
    1.3K
  • Webpack入门,模块打包之加载其他类型的模块

    在实际开发中,开发者可能遇到其他类型的模块,比如AMD、UMD模块,虽然这些模块在目前的使用场景已经不多,但是遇到这些模块时仍然需要知道如何处理。 加载非模块化的文件 非模块化文件…

    2022年11月14日
    720
  • Webpack入门,自定义loader

    有时开发者会遇到现有loader无法很好满足需求的情况,这时就需要对其进行修改,或者编写新的loader。 下面以一个简单的示例,讲解以下如何实现一个loader。 需求 实现一个…

    2022年11月23日
    831
  • Java自学之类结构扩展

    面向对象中的核心组成是类与接口,在项目中会利用【包】进行一组相关类的管理,这样适合于程序代码的部分更新,也更加符合面向对象封装性的概念,同时合理地使用封装也可以方便地实现实例化对象…

    2020年12月10日
    1.4K
  • 5分钟带你入门vuex(vue状态管理)

    如果你之前使用过vue.js,你一定知道在vue中各个组件之间传值的痛苦,在vue中我们可以使用vuex来保存我们需要管理的状态值,值一旦被修改,所有引用该值的地方就会自动更新,那…

    2019年11月5日
    2.2K
  • 创建JavaScript对象的六种方式

    第一种:Object 构造函数创建 这行代码创建了 Object 引用类型的一个新实例,然后把实例保存在变量 Person 中。 第二种:使用对象字面量表示法 对象字面量是对象定义…

    2020年6月24日
    1.4K
  • JavaScript中call、apply及bind的深度解析

    函数原型链中的 apply,call 和 bind 方法是 JavaScript 中相当重要的概念,与 this 关键字密切相关,相当一部分人对它们的理解还是比较浅显,所谓js基础…

    2019年8月5日
    1.7K

发表回复

登录后才能评论