MySQL数据库学习笔记(索引)

您所在的位置:网站首页 mysql查询列数 MySQL数据库学习笔记(索引)

MySQL数据库学习笔记(索引)

2023-04-13 01:45| 来源: 网络整理| 查看: 265

索引

优点

1、提高数据检索效率,降低数据库的IO成本

2、通过索引对数据库进行排序,降低数据排序成本,降低CPU消耗

缺点

1、索引需要占用空间

2、索引大大提高了查询效率,但是降低了插入、删除、更新等操作的效率

不同存储引擎索引结构不同

B+Tree索引 大多数【全部支持】

Hash索引【仅支持memory】

R-Tree索引(空间索引)【仅支持MyISAM】

Full-Text索引(全文索引)【仅支持MyISAM、5.6版本后的InnoDB支持】

B+Tree索引

B-Tree 度数大于2的数

B+Tree所有元素都会出现在叶子节点,叶子节点形成了一个单向链表

B+Tree索引在B+Tree结构上进行了优化,叶子节点之间用双向循环链表连接

Hash索引

只能用于等值查询,不支持范围查询

无法利用索引完成排序操作

查询效率高,通常只需要一次检索就可以了(不出现hash冲突),效率通常高于B+Tree索引

InnoDB中具有自适应hash功能

为什么InnoDB选择B+Tree索引结构?(面试题)

相对于二叉树层级更少,搜索效率高

相对于B-Tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页

中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,

导致性能降低

相对于Hash索引,B+Tree支持范围匹配和排序操作

索引分类

主键索引:

针对于表中主键创建的索引、默认自动创建,只能有一个、关键字PRIMARY

唯一索引:

避免同一个表中某数据列中的值重复、可以有多个、关键字UNIQUE

常规索引:

快速定位数据、可以有多个

全文索引:

查找的是文本中的关键字,而不是比较索引里的值、可以有多个、关键字FULLTEXT

OR

聚集索引:(默认主键索引、不存在主键会使用第一个唯一索引、不存在唯一索引会自动生成rowid)

将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据、必须有,而且只有一个

二级索引:

将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键、可以有多个

回表查询:先走二级索引得到主键值,再根据主键值去聚集索引中获取数据

索引操作语法

创建索引

create [unique|fulltext] index index_name on table_name(关联字段名,可以有多个);

如果一个索引关联一个字段,则称为单链索引

查看索引

show index from table_name;后加上\G改变格式,列转行

删除索引

drop index index_name on table_name;

索引名称规范:

index_表名_字段名

SQL优化(主要针对查询)

SQL性能分析

SQL执行频率

show [session当前会话|global全局] status可以查看当前数据库insert、update、delete、select的访问频次

show global status like 'Com_操作类型'; 使用一个下划线代表一个字符,

慢查询日志

记录所有执行时间超过指定参数的SQL语句,默认10s

show variables like 'slow_query_log'; 显示慢查询日志开启情况

profile

show profiles能显示每一条语句耗费的时间,且展示耗时详情

select @@have_profiling;查看当前数据库是否支持profile

show profile [cpu] for query query_id;查看指定SQL语句的(cpu)耗时详情

explain查看执行计划*

在任意select语句前加上关键字explain/desc

字段含义:

id:select查询的序列号,表示查询中执行select子句或者是操作表的顺序(从大到小执行,相同则从上到下)

select_type:查询类型

!type:访问类型,性能由好到差:NULL、system、const、eq_ref、ref、range、index、all

尽量把type往前优化

NULL一般达不到、const根据主键或者唯一索引、ref根据非唯一索引查询

!possible_key:可能应用的索引,一个或者多个

!key:实际用到的索引

!Key_len:索引中的字节数,该值为索引字段最大可能长度,并非实际使用长度,不损失精度前提下越短越好

rows:预估执行查询的行数

filtered:表示返回结果的行数占读取行数的百分比,越大越好

extra:额外没有展示的内容

索引使用原则

最左前缀法则

使用联合索引时,查询从索引的最左列(必须存在,但是与其位置无关)开始(否则索引失效),并且不跳过索引中的列

如果跳过了某一列,索引会部分被失效(后面的字段索引)

范围查询 >和=和



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3