MySQL优化|一分钟带你了解单表优化
在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程。
这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格,老杜真的是从MySQL基础一点点带我入门,基础也学得很扎实。
这个教程总体来说就就像列文虎克教学,细到极致,妙到毫巅。
内容涵盖了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性等等。
学完这套视频基本可掌握MySQL全套知识了,值得收藏学习,需要的小伙伴点击以下链接
在线观看:
MySQL基础入门-mysql教程-数据库实战(MySQL基础+MySQL高级+MySQL优化+MySQL34道作业题)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
资料下载:
sql创建代码
1 CREATE TABLE IF NOT EXISTS `article` (
2 `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 `author_id` INT(10) UNSIGNED NOT NULL,
4 `category_id` INT(10) UNSIGNED NOT NULL,
5 `views` INT(10) UNSIGNED NOT NULL,
6 `comments` INT(10) UNSIGNED NOT NULL,
7 `title` VARBINARY(255) NOT NULL,
8 `content` TEXT NOT NULL
9 );
添加测试数据
1 INSERT INTO `article` ( `author_id`, `category_id`,`views`,`comments`, `title` ,`content`) VALUES
2 (1, 1,1,1,'1','1'),
3 (2,2,2,2, '2', '2'),
4 (1, 1,3,3,'3', '3');
查询表数据

sql需求:
查询category_ id 为1且comments大于1的情况下,views最多的文章ID
写出SQL语句并执行
1 select id,author_id from article where category_id=1 and comments>1 order by views;
可以对比上边表数据对照看

初步分析SQL语句
可以看到进行了全表扫描,并且使用了文件排序 这种SQL是必须进行优化的

建立索引
1 # 创建索引
2 create index ind_article_ccv on article(category_id,comments,views);
3
4 # 查看表的所有索引
5 show index from article

在次使用explain分析
1 explain select id,author_id from article where category_id=1 and comments>1 order by views;
发现全表扫描我们解决了,但是文件排序还没有解决。那么这个方案也是不可以的

删除索引
1 # 删除索引
2 drop index ind_article_ccv on article
3
4 # 查看表的所有索引
5 show index from article
重新建立索引,并查看分析
那么我们在来给caterory_id和view建立一个索引
1 # 创建索引
2 create index ind_article_cv on article(category_id,views);
3
4 # 分析语句
5 explain select id,author_id from article where category_id=1 and comments>1 order by views;
此次优化总结
- 在第一次给三个字段都加上索引后,type变成了range这个是可以忍受的,但是extra里使用了filesort仍是无法忍受的
- 但是我们已经给他们三个字段建立了索引了,为什么没有用呢?
- 这是因为根据Btree索引的工作原理
- 先进行排序category_id
- 如果遇到相同的category_id则在排序comments,如果在遇到comments则再排序views
- 当comments字段在联合索引里处于中间位置时
- 因为comments>1是一个范围值(所谓range)
- MySQL无法利用索引在对后边的views部分进行检索,即range类型查询字段后面的索引会失效
————————————————
原文链接:https://blog.csdn.net/fangkang7/article/details/105282077
MySQL优化|一分钟带你了解单表优化的更多相关文章
- SQL优化 MySQL版 - 单表优化及细节详讲
单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...
- MySQL的索引单表优化案例分析
建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`article`( `id` INT ...
- MySQL索引优化(索引单表优化案例)
1.单表查询优化 建表SQL CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUT ...
- Android性能优化:手把手带你全面实现内存优化
前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录 1. 定义 优化处理 应用程序的内存使用.空间占用 2. 作用 避免因不正确使用内 ...
- mysql 造1亿条记录的单表--大数据表
读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXI ...
- MySQL入门,第七部分,单表查询
首先我们需要了解一下整个数据库的结构 其中Student表中Sno为主键.Study表中Sno和Cno合起来做主键.Course表中Cno为主键 其创建脚本如下: #----------------- ...
- MySQL 单表优化
一.表字段优化 1.整数类型尽量使用 TINYINT.SMALLINT.MEDIUM_INT 而不是INT,非负数要加上UNSIGNED 2.VARCHAR的长度分配要合理,不要过大 3.时间字段不超 ...
- 详解MySQL大表优化方案( 转)
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
- MySQL 大表优化方案探讨
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...
随机推荐
- 关于生产环境改用G1垃圾收集器的思考
背景 由于我们的业务量非常大,响应延迟要求高.目前沿用的老的ParNew+CMS已经不能支撑业务的需求.平均一台机器在1个月内有1次秒级别的stop the world.对系统来说是个巨大的隐患.所以 ...
- Distributed | Paxos
自Paxos问世以来就持续垄断了分布式一致性算法,Paxos这个名词几乎等同于分布式一致性.Google的很多大型分布式系统都采用了Paxos算法来解决分布式一致性问题.在学习了Raft算法之后自然不 ...
- 【转载】C# get 与set的一些说明
转载 在面向对象编程(OOP)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用set和get方法来访问私有成员变量,它们相当于外界访问对象 ...
- PAT A1032 Sharing
题意:给出两条链表的首地址以及若干节点的地址,数据,下一个节点的地址,求两条链表的首个共用节点的地址.如果两条链表没有共用节点,则输出-1.思路步骤1:由于地址的范围很小,因此可以直接用静态链表,但是 ...
- Java实现操作系统中四种动态内存分配算法:BF+NF+WF+FF
1 概述 本文是利用Java实现操作系统中的四种动态内存分配方式 ,分别是: BF NF WF FF 分两部分,第一部分是介绍四种分配方式的概念以及例子,第二部分是代码实现以及讲解. 2 四种分配方式 ...
- Compound Words UVA - 10391
You are to find all the two-word compound words in a dictionary. A two-word compound word is a wor ...
- kubernetes集群centos7初始化
设置系统主机名以及 Host 文件的相互解析 hostnamectl set-hostname k8s-master01 安装依赖包 yum -y install wget net-tools nfs ...
- nginx下强制跳转到www域名
跳转www #先监听 exp.com域名,然后转发到www下面 server { listen 80; server_name exp.com; rewrite ^(.*) $scheme://www ...
- dedecms arclist分页
https://blog.csdn.net/qq_41104911/article/details/81510589
- 【JDK8】Java8 LocalDate操作时间和日期的API
时间项目中的涉及到的时间处理非常多,犹豫SimpleDateFormat的不安全性以及Calendar等类在计算时比较复杂, 往往我们都会使用工具类来封装较多的日期处理函数, 但是JDK8中新增了操作 ...

