IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【mysql索引及优化】一、mysql性能分析及索引 -> 正文阅读

[大数据]【mysql索引及优化】一、mysql性能分析及索引

一、性能分析

1.慢查询日志

Mysql的慢查询日志默认没有开启,需要在mysql配置文件(etc/my.cnf)中配置如下信息:
//开启mysql慢查询日志查询开关
slow_query_log=1
//设置慢日志的时间为2秒,SQL语句时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

2.profile性能分析

show profiles
能够在做SQL优化时帮助我们了解时间都耗费到哪里去了。通过have_profiling参数,能够查看到当前MySQL是否支持profile操作:
select @@have_profiling;
默认profiling时关闭的,可以通过set语句在session/global级别开启profiling;
Set profiling = 1;
执行一系列的业务SQL的操作,然后通过如下指令查看指令执行的耗时:
//查看每一条SQL的耗时基本情况
Show profiles;
//查看指定query_id的sql语句各个阶段的耗时情况
Show profile for query query_id
//查看指定query_id的SQL语句CPU的使用情况
Show profile cpu for query query_id

3.explain执行计划

Explain 或者desc 命令获取mysql如何执行select语句的信息,包括在select语句执行过程中表如何连接和连接的顺序。
语法: Explain sql语句
Explain执行计划各字段含义:
1)Id
select查询的序列号,表示查询中执行select子句或者操作表的顺序(id相同,执行顺序从上到下,id不同,值越大,越先执行)
2)Select_type
表示select类型,常见的取值有simple(简单表,不使用表连接或者子查询)、p’rimary(主查询,即外层的查询)、union(union中的第二个或者后面的查询语句)subquery(子查询)等
3)Type
表示连接类型,性能由好到差的连接类型为null(select ‘A’)、system、const(根据主键查询)、eq_ref、ref、ranger、index(根据索引,但是会遍历整个索引)、all(全表,需要优化).
4)Possible_keys
可能使用到的索引,一个或者多个
5)Key
实际使用的索引,如果为null则表示没有使用
6)Key_len
表示索引中使用的字节数,该值为索引字段最大的可能长度,并非实际使用长度,在不损失精确度的情况下,长度越短越好
7)Rows
Mysql认为必须要执行查询的行数,在innodb中,是一个估算值,可能并不准确
8)Filtered
表示返回的行数占需读取行数的百分比,filtered的值越大越好

4.索引的使用

1)最左前缀法则
如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索引将部分失效(后面的字段索引失效)
2)范围查询
联合索引中,出现范围查询(>,<)范围查询右侧的列索引失效,可用(>=,<=)优化
3)索引列运算
不要在索引列上进行运算操作,索引将会失效
4)字符串不加引号
字符串不加单引号会导致索引失效
5)模糊查询
如果仅仅是尾部模糊匹配,索引不会失效。如果是头部模糊匹配,索引失效
6)Or连接的条件
用or分割开的条件,如果or前面的条件中的列有索引,而后面的列中没有索引,那么涉及到的索引都不会使用到 7)数据分布影响
如果mysql评估使用索引比全表查询慢,则不使用索引
8)SQL提示
SQL提示,是优化数据库的一个重要手段,简单来说,就是在SQL语句中加入一些人为的提示来达到优化操作的目的 Use index:
在这里插入图片描述
Ignore index:
在这里插入图片描述

  Force index:

在这里插入图片描述

9)覆盖索引
尽量使用覆盖索引(查询使用了索引,并且需要返回的列,在该索引中已经全部能够找到),减少select *.
在这里插入图片描述

Using index condition:查找使用了索引,但是需要回表查询数据
Using where;using index:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
10)前缀索引
当字段类型为字符串(varchar,text等)时,有时候需要索引很长的字符串,这会让索引变的很大,查询时,浪费大量的磁盘io,影响查询效率。此时可以只将字符串的一部分前缀,建立索引,这样可以大大节省索引空间,从而提高索引效率。
语法: Create index idx_XXXX on table(column(n));
前缀长度:
可以根据索引的选择性来决定,而选择性是指不重复的索引值(基数)和数据表的记录总数的比值,索引选择性越高则查询效率越高,唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的
在这里插入图片描述

5.索引设计原则

1)针对数据量比较大,且查询比较频繁的表建立索引
2)针对于常作为查询条件(where)、排序(order by)、分组(group by)操作的字段建立索引
3)尽量选择区分度高的列作为索引,尽量建立唯一索引,区分度越高,使用索引的效率越高(例如性别不建议建立索引)
4)如果是字符串类型的字段,字符的长度较长,可以针对于字段的特点,建立前缀索引
5)尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率
6)要控制索引的数量,并不是多多益善,索引越多,维护索引结构的代价就越大,会影响增删改的效率
7)如果索引列不存在null值,请在创建表时使用not null约束它,当优化器知道每列是否包含null时,它可以更好的确认那个索引最有效的用于查询

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:28:20  更:2022-04-01 23:29:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:04:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码