我的编程空间,编程开发者的网络收藏夹
学习永远不晚

浅谈MySQL索引优化分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

浅谈MySQL索引优化分析

为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句。还在等啥子?撸起袖子就是干!

案例分析

我们先简单了解一下非关系型数据库和关系型数据库的区别。

MongoDB是NoSQL中的一种。NoSQL的全称是Not only SQL,非关系型数据库。它的特点是性能高,扩张性强,模式灵活,在高并发场景表现得尤为突出。但目前它还只是关系型数据库的补充,它在数据的一致性,数据的安全性,查询的复杂性问题上和关系型数据库还存在一定差距。

MySQL是关系性数据库中的一种,查询功能强,数据一致性高,数据安全性高,支持二级索引。但性能方面稍逊与MongoDB,特别是百万级别以上的数据,很容易出现查询慢的现象。这时候需要分析查询慢的原因,一般情况下是程序员sql写的烂,或者是没有键索引,或者是索引失效等原因导致的。

 公司ERP系统数据库主要是MongoDB(最接近关系型数据的NoSQL),其次是Redis,MySQL只占很少的部分。现在又重新使用MySQL,归功于阿里巴巴的奇门系统和聚石塔系统。考虑到订单数量已经是百万级以上,对MySQL的性能分析也就显得格外重要。

我们先通过两个简单的例子来入门。后面会详细介绍各个参数的作用和意义。

说明:需要用到的sql已经放在了github上了,喜欢的同学可以点一下star,哈哈。

https://github.com/ITDragonBlog/daydayup/tree/master/MySQL/

场景一:订单导入,通过交易号避免重复导单

业务逻辑:订单导入时,为了避免重复导单,一般会通过交易号去数据库中查询,判断该订单是否已经存在。

最基础的sql语句


mysql> select * from itdragon_order_list where transaction_id = "81X97310V32236260E";
+-------+--------------------+-------+------+----------+--------------+----------+------------------+-------------+-------------+------------+---------------------+
| id  | transaction_id   | gross | net | stock_id | order_status | descript | finance_descript | create_type | order_level | input_user | input_date     |
+-------+--------------------+-------+------+----------+--------------+----------+------------------+-------------+-------------+------------+---------------------+
| 10000 | 81X97310V32236260E |  6.6 | 6.13 |    1 |      10 | ok    | ok        | auto    |      1 | itdragon  | 2017-08-18 17:01:49 |
+-------+--------------------+-------+------+----------+--------------+----------+------------------+-------------+-------------+------------+---------------------+

mysql> explain select * from itdragon_order_list where transaction_id = "81X97310V32236260E";
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table        | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra    |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE   | itdragon_order_list | NULL    | ALL | NULL     | NULL | NULL  | NULL |  3 |  33.33 | Using where |
+----+-------------+---------------------+------------+------+---------------+------+---------+------+------+----------+-------------+

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

浅谈MySQL索引优化分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅谈MySQL聚簇索引

目录1. 什么是聚簇索引2. 聚编程客栈簇索引和主键3. 聚簇索引优缺点4. 最佳实践1. 什么是聚簇索引数据库的索引从不同的角度可以划分成不同的类型,聚簇索引便是其中一种。聚簇索引英文是 Clustered Ind编程客栈ex,有时候
2023-04-19

MySQL索引优化实例分析

目录1.数据准备2.实例一3.mysql如何选择合适的索引?4.常见 SQL 深入优化4.1.Order by与Group by优化4.2.分页查询优化4.3.join关联查询优化4.3.1.数据准备4.3.2.MySQL 表关联常见的两种
2022-07-29

MySQL优化--概述以及索引优化分析

一、MySQL概述1.1、MySQL文件含义通过如下命令查看show variables like ‘%dir%‘;MySQL文件位置及含义名称值备注basedir/usr/安装路径character_sets_dir/usr/share/mysql-8.0/
MySQL优化--概述以及索引优化分析
2020-07-19

MySQL索引优化分享

2,explain的作⽤ 查看表的读取顺序,读取操作类型,有哪些索引可用,表之间关联,每张表中有哪些索引被优化器执⾏3,索引命中策略略分析    最左匹配原则 在索引字段上加入函数(不匹配索引)    is null/is not null/not in(不匹
MySQL索引优化分享
2016-09-28

三、索引优化分析(下)

4. 性能分析 4.1 MySQL 常见性能瓶颈 ① CPU:CPU 在满负荷运行一般发生在数据装入到内存或从磁盘读取数据时; ② IO:磁盘 IO 瓶颈发生在装入数据远大于内存容量时; ③ 服务器硬件瓶颈:通过 top、free、iostat、vmstat
三、索引优化分析(下)
2019-08-11

MySQL优化之索引解析

索引的本质MySQL索引或者说其他关系型数据库的索引的本质就只有一句话,以空间换时间。索引的作用索引关系型数据库为了加速对表中行数据检索的(磁盘存储的)数据结构索引的分类数据结构上面的分类HASH 索引等值匹配效率高不支持范围查找树形索引二叉树,递归二分查找法
MySQL优化之索引解析
2019-07-07

浅谈MySQL 亿级数据分页的优化

目录背景分析数据模拟1、创建两个表:员工表和部门表2、创建两个函数:生成随机字符串和随机编号3、编写存储过程,模拟500W的员工数据4、编写存储过程,模拟120的部门数据5、建立关键字段的索引,这边是跑完数据之后再建索引,会导致建索引耗时长
2022-05-27

MySQL索引优化

一、单表创建索引之前:type=ALL全表扫描,Extra里面的Using filesort(文件内部排序)根据where后面的条件创建:CREATE INDEX idx_article_ccv ON article(category_id,comments,
MySQL索引优化
2019-01-06

浅析MysQL B-Tree 索引

B-Tree 索引不同的存储引擎也可能使用不同的存储结构,i如,NDB集群存储引擎内部实现使用了T-Tree结构存储这种索引,即使其名字是BTREE;InnoDB使用的是B+Tree。 B-Tree通常一位这所有的值都是按顺序存储的,并且每
2022-05-22

浅谈MySQL中不等号索引问题

目录1.当不等号作用在普通索引字段上2.当不等号作用在主键索引字段上3.当不等号<&gjst;作用在唯一索引字段上最近在使用WMtQvrmysql中的一个小总结。在MySQL中,不等号在主键字段和唯一索引字段中会走索引编程,在
2023-03-20

浅谈MySQL之select优化方案

目录生活中的例子慢查询如何去优化countlimit最大值最小值min&max生活中的例子我们是否看到过在公司中许多查询语句都是select * xxxx 心中的想法肯定是,别人写了select *,那我写吧,省去了不少麻烦事儿 慢查询首先
2022-05-31

浅谈MySQL为什么会选错索引

目录1.引例2.优化器的逻辑3.解决办法1.引例首先创建一张表,并对字段a,b分别建立索引:create table t (id int(11) not null,a int(11) default null,b int(11) def
2023-03-20

编程热搜

目录