MySQL从入门到高级 --- 10.索引

第十章:

10.索引

  • 索引通过某种算法,构建出一个数据模型,用来快速查找在某个列中有一特定值的行,若表中查询的列有一个索引,MySQL能快速到达一个位置去搜索数据文件,而不必查看所有数据,将会节省很多时间
10.1 分类
  • Hash索引

  • B+Tree索引

Hash

在这里插入图片描述

B+Tree

在这里插入图片描述

功能划分

在这里插入图片描述

  • 单列索引:一个索引包含单个列,但一个表中可有多个单列索引

  • 普通索引:允许在定义索引的列中插入重复值和空值,没太多限制

10.2 创建索引
10.2.1 单列索引 - 普通索引

语法

-- 法1 创建表时直接指定
create database mydb12;
use mydb12;
create table stu(
    sid int primary key,
    name varchar(20),
    gender varchar(20),
    age int,
    score double,
    index index_name(name) -- name列创建索引
);

-- 法2 直接创建
-- create index indexname on tablename(columnname);
create index index_gender on stu(gender);

-- 法3 修改表结构
-- alter table tablename add index index_name(columnname);
alter table stu add index index_age(age);

在这里插入图片描述

10.2.2 查看索引

在这里插入图片描述
在这里插入图片描述

10.2.3 删除索引

语法

drop index 索引号 on 表名

alter table 表名 drop index 索引名

drop index index_gender on stu;
alter table stu drop index index_name;
10.2.4 单列索引 - 唯一索引
  • 索引列的值必须唯一,但允许有空值

语法

-- 法1 创建表时直接指定
create table stu2(
    sid int primary key,
    id varchar(20),
    name varchar(20),
    gender varchar(20),
    age int,
    score double,
    unique index_id(id) -- id列创建索引
);

-- 法2 直接创建
-- create unique index index_name on tablename(columnname);
create unique index index_gender on stu2(gender);

-- 法3 修改表结构
-- alter table tablename add unique index_name(columnname);
alter table stu2 add unique index_age(age);
10.2.5 单列索引 - 主键索引
  • 一种特殊的唯一索引,在创建表时,会自动在主键列上建立一个索引

在这里插入图片描述

10.2.6 组合索引
  • 也被称为复合索引,在建立索引时使用多个字段。使用复合最左原则

语法

create index indexname on table_name(column(length, column2(length));

create index index_age_score on stu2(age,score);

操作:

select * from stu2 where score = 88; -- 1
select * from stu2 where age = 20 ; -- 2
select * from stu2 where age = 20 and score = 88; -- 3
select * from stu2 where score = 88 and age = 20; -- 4
-- 2、3、4因为条件里必须包含索引前面的字段才能进行匹配,可用到索引index_age_score
-- 3、4相比where条件顺序不一样,在mysql中它们等价
10.3 全文索引
10.3.1 概述

关键字:fulltext

作用:查找文本中的关键字

使用like + %可实现模糊匹配,在大量数据里,全文索引比它快很多倍,不是一个量级,但全文索引精度可能存在问题

变量

  • 最小搜索长度

  • 最大搜索长度

搜索时,词语需在最小搜索长度和最大搜索长度的区间内

-- 查看这两个变量的默认值
show variables like '%ft%';
10.3.2 使用

关键字:match、against

语法:match(col1, col2, …) against(expr [search_modifier])

create table article(
    id int primary key auto_increment,
    title varchar(255),
    content varchar(999),
    writing date,
    fulltext(content) -- 创建全文索引
);

-- 添加全文索引
create fulltext index index_content on article(content);

-- 修改表结构添加全文索引
alter table article add fulltext index_content(content);
drop table article;
insert into article values(null,'zoo', 'yesterday one zoo animal hav dog and cat', '2004-01-26');
insert into article values(null,'food', 'you one food hav milk you you and bread', '2004-02-16');

insert into article values(null,"hair", "yesterday you one hair hav you short you",'2004-05-27');

select * from article where match(content) against('yo'); -- 无
select * from article where match(content) against('you'); -- 有 
select * from article where content like '%you%';
10.4 空间索引
  • 空间索引是对空间数据类型的字段建立的索引

  • 创建空间索引的列,必须将其声明NOT NULL

  • 使用SPATIAL关键字进行扩展,使能够用于创建正规索引类型的语法创建空间索引

数据类型

  • GEOMETRY

  • POINT

  • LINESTRING

  • POLYGON

10.4.1 操作

在这里插入图片描述
在这里插入图片描述

10.5 原理

索引本身很大,不可能全部存储在内存中,索引往往以索引文件的形式存储磁盘上。查找过程要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高很大,索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数。

10.5.1 相关算法

Data Structure Visualization (usfca.edu)

Hash算法

在这里插入图片描述

  • 优点:通过字段值计算的hash值,定位数据快

  • 缺点:不能进行范围查找,散列表中的值是无序的,无法进行大小比较

二叉树

在这里插入图片描述

  • 特征:分为左子树、右子树和根节点,左子树比根节点值小,右子树比根节点值大

  • 缺点:有可能产生不平衡

平衡二叉树

在这里插入图片描述

特征

  • 左子树和右子树都是平衡二叉树

  • 左子树比中间值小, 右子树比中间值大

  • 左子树和右子树的深度之差的绝对值不超过1

缺点

  • 插入操作要旋转

  • 支持范围查询,但回旋查询效率较低

  • 树高度越高,查询效率会越慢

BTREE树
  • 目前大多数数据库系统及文件系统都采用B-Tree或B+Tree作为索引结构,Btree结构可有效解决之前相关算法所遇到的问题
B-Trees树

在这里插入图片描述

B+Trees树

在这里插入图片描述

10.6 MyISAM引擎使用B+Tree

在这里插入图片描述

10.7 InnoDB引擎使用B+Tree
  • 叶节点的data域存放数据,比MyISAM效率高一点,但比较占硬盘内存大小

在这里插入图片描述

10.8 索引特点

优点

  • 加快查询数据的速度

  • 显著减少查询时分组和排序的时间

  • 创建唯一索引,能保证数据库每一行数据的唯一

  • 实现数据的参考完整性方面,可加速表与表之间的连接

缺点

  • 随着数据量的增加,消耗时间也会增加

  • 需要占磁盘空间

  • 对数据表中数据进行增删改时,索引也要动态维护,降低了维护的速度

10.9 使用原则
  • 更新频繁的列不设索引

  • 数据量小的表不使用索引

  • 重复数据多的字段不设索引

  • 有限考虑对where和order by所涉及的列上建立索引

  • 81
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL是一种流行的关系型数据库管理系统,具有易学易用、高性能和开源的特点。要想从入门到精通MySQL,需要掌握以下几个方面。 首先,了解MySQL的基本概念和架构。理解数据库、表、字段、索引和查询等基础概念,并了解MySQL的客户端-服务器架构以及数据的存储和查询过程。 其次,学习MySQL的安装和配置。学会如何下载、安装和配置MySQL服务器,并了解MySQL的配置文件和常见配置选项。 然后,熟悉MySQL的SQL语言。学习如何使用SQL语句进行数据的插入、更新、删除和查询。掌握SQL语句的基本语法和常用的查询操作,如JOIN、GROUP BY和ORDER BY等。 接着,了解MySQL的优化和调优技巧。学习如何通过创建合适的索引、优化查询语句和调整服务器参数等方式提高MySQL的性能。掌握查询执行计划的分析方法和索引的设计原则。 最后,深入学习MySQL高级特性和扩展功能。学习如何使用存储过程、触发器和视图等高级特性,以及如何使用复制、分区和集群等扩展功能。同时,了解MySQL的安全机制和备份恢复策略,确保数据的安全性和可靠性。 通过以上的学习和实践,就可以从入门逐步进阶,最终掌握MySQL的各种特性和技巧,成为一名MySQL的专家。当然,实际的学习过程中还需要大量的实践和项目经验积累,不断提升自己的技术能力和解决问题的能力。 ### 回答2: 《MySQL入门到精通》是一本由李波撰写的MySQL学习指南。该书详细介绍了MySQL数据库的基础知识和高级应用技巧,适合初学者和进阶学习者阅读。 该书的前几章主要介绍了数据库的基本概念和MySQL的安装与配置方法。作者通过简明扼要的语言,帮助读者了解数据库的概念、结构和基本操作,以及如何在各种操作系统上安装和配置MySQL。 接下来的几章主要介绍了SQL语言的基本知识和常用操作。作者通过实例演示和练习题,详细讲解了SQL的语法、查询、插入、更新和删除操作,以及各种约束和函数的使用。 随后的章节逐渐深入,介绍了MySQL数据库高级应用技巧和性能优化方法。作者详细介绍了索引的原理和使用方式,以及如何设计和优化数据库模型,提高查询和执行效率。此外,作者还介绍了如何进行备份和恢复数据库,以及如何保护数据库的安全性。 最后几章则介绍了MySQL数据库在Web开发中的应用。作者详细介绍了如何使用PHP和MySQL进行数据交互,以及如何利用MySQL实现用户认证和权限控制等功能。 总的来说,该书通过丰富的示例和实践操作,帮助读者系统全面地了解和掌握MySQL数据库的使用。无论是初学者还是有一定经验的开发人员,都可以通过阅读该书有效提升自己的MySQL水平。 ### 回答3: 《MySQL入门到精通李波》是一本以MySQL数据库为主题的书籍,旨在帮助读者从零开始学习MySQL,并逐步成为MySQL专家。 首先,书中会介绍MySQL数据库的基本概念、结构和工作原理,以及在不同操作系统下的安装和配置方法。读者可以从中了解MySQL的基本特性,如数据类型、表、索引等,以及MySQL与其他数据库系统的差异。 第二,书中会逐步引导读者学习SQL语言,这是使用MySQL的必备知识。读者将学习SQL的基本语法和常用操作,如查询数据、插入、更新和删除等。此外,书中还会介绍高级的SQL操作和性能优化技巧,以提升数据库的效率和查询速度。 第三,书中会详细介绍MySQL高级功能和特性。读者将学习如何进行数据库的备份与恢复、事务管理以及数据安全等方面的知识。同时,还会介绍MySQL的集群和分布式架构,以及如何进行数据库的水平和垂直拆分,以满足大规模应用的需求。 最后,书中还会介绍MySQL的性能调优和故障处理方法。读者将学习如何监控数据库的性能指标,以及如何调整数据库配置和优化查询语句,以提高数据库的性能和稳定性。同时,还会介绍如何处理数据库故障和恢复数据的方法。 总之,通过《MySQL入门到精通李波》,读者可以系统地学习MySQL数据库的基本知识和高级技巧,从而成为一名熟练的MySQL专家。无论是初学者还是有一定经验的开发人员,都可以通过这本书提升自己的数据库技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值