【MySQL】基于InnoDB的数据库索引

文章目录

*
前言
1、索引引入
2、索引语法

+ 2.1、创建索引
+ 2.2、查看索引
+ 2.3、删除索引
+ 2.4、案例引入
3、索引结构

+ 3.1、概述
+ 3.2、引擎支持
+ 3.3、B+Tree
+ 3.4、Hash
4、索引类别

+ 4.1、分类
+ 4.2、过程分析
5、性能分析

+ 5.1、执行频率
+ 5.2、慢查询日志
+ 5.3、explain
6、最左前缀原则
7、索引失效

+ 7.1、范围查询
+ 7.2、列运算
+ 7.3、字符串不加引号
+ 7.4、模糊查询
+ 7.5、OR连接
+ 7.6、数据分布影响
8、设计原则

前言

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓”好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如”精通MySQL”、”SQL语句优化”、”了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。

文章中引用的优秀资源如下:

1、索引引入

索引( Index)是一个单独的、存储在磁盘上的 数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的 检索速度。比如我们在查字典的时候,前面都有检索的拼音和偏旁、笔画等,然后找到对应字典页码,这样然后就打开字典的页数就可以知道我们要搜索的某一个key的全部值的信息了。

优势劣势提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的。通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。索引大大提高了查询效率,同时却也降低更新表的速度,如对表进行INSERT、UPDATE、DELETE时,效率降低。

索引的目的在于 提高查询效率,避免在面对大量数据时进行全表扫描给MySQL和服务器造成大压力。

2、索引语法

将语法写在这里意在对使用上有一个初步的认识和了解(主要是狗子我比较喜欢先会用再继续去深入学习)

2.1、创建索引

CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name,... );

2.2、查看索引

SHOW INDEX FROM table_name ;

2.3、删除索引

DROP INDEX index_name ON table_name

2.4、案例引入

这里涉及到的索引类别后续会介绍,可以根据字面意思理解,也可先简单看做加了一个索引,后续到介绍索引类别时再理解。(数据没有放在这里,因为显得有点繁琐,推荐使用 Navicat16数据自动生成功能轻松搞个千万数据,真香警告)


create table tb_user(
    id int primary key auto_increment comment '主键',
    name varchar(50) not null comment '用户名',
    phone varchar(11) not null comment '手机号',
    email varchar(100) comment '邮箱',
    profession varchar(11) comment '专业',
    age tinyint unsigned comment '年龄',
    gender char(1) comment '性别 , 1: 男, 2: 女',
    status char(1) comment '状态',
    createtime datetime comment '创建时间'
) comment '系统用户表';

CREATE INDEX idx_user_name ON tb_user(name);

CREATE INDEX idx_user_phone ON tb_user(phone);

CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,status);

CREATE INDEX idx_email ON tb_user(email);

SHOW INDEX FROM tb_user;

3、索引结构

3.1、概述

除了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总是通过同一种查找方式来锁定数据。

数据库也是一样,但显然要复杂许多,因为不仅面临着等值查询,还有范围查询(>、

Original: https://blog.csdn.net/Aqting/article/details/128391812
Author: 陈宝子
Title: 【MySQL】基于InnoDB的数据库索引

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/806075/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球