在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程。

这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格,老杜真的是从MySQL基础一点点带我入门,基础也学得很扎实。

这个教程总体来说就就像列文虎克教学,细到极致,妙到毫巅。

内容涵盖了MySQL的相关知识,包括MySQL概述,MySQL应用环境,MySQL系统特性,MySQL初学基础,MySQL管理工具,如何安装MySQL及MySQL新特性等等。

学完这套视频基本可掌握MySQL全套知识了,值得收藏学习,需要的小伙伴点击以下链接

在线观看:

MySQL基础入门-mysql教程-数据库实战(MySQL基础+MySQL高级+MySQL优化+MySQL34道作业题)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

资料下载:

MySQL视频教程全套免费下载【适合零基础入门学习】 - 动力节点 (bjpowernode.com)

sql创建代码

  1. 1 CREATE TABLE IF NOT EXISTS `article` (
  2. 2 `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3. 3 `author_id` INT(10) UNSIGNED NOT NULL,
  4. 4 `category_id` INT(10) UNSIGNED NOT NULL,
  5. 5 `views` INT(10) UNSIGNED NOT NULL,
  6. 6 `comments` INT(10) UNSIGNED NOT NULL,
  7. 7 `title` VARBINARY(255) NOT NULL,
  8. 8 `content` TEXT NOT NULL
  9. 9 );

添加测试数据

  1. 1 INSERT INTO `article` ( `author_id`, `category_id`,`views`,`comments`, `title` ,`content`) VALUES
  2. 2 (1, 1,1,1,'1','1'),
  3. 3 (2,2,2,2, '2', '2'),
  4. 4 (1, 1,3,3,'3', '3');

查询表数据

sql需求:

查询category_ id 为1且comments大于1的情况下,views最多的文章ID

写出SQL语句并执行

  1. 1 select id,author_id from article where category_id=1 and comments>1 order by views;

可以对比上边表数据对照看

初步分析SQL语句

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

建立索引

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

在次使用explain分析

  1. 1 explain select id,author_id from article where category_id=1 and comments>1 order by views;

发现全表扫描我们解决了,但是文件排序还没有解决。那么这个方案也是不可以的

删除索引

  1. 1 # 删除索引
  2. 2 drop index ind_article_ccv on article
  3. 3
  4. 4 # 查看表的所有索引
  5. 5 show index from article

重新建立索引,并查看分析

那么我们在来给caterory_id和view建立一个索引

  1. 1 # 创建索引
  2. 2 create index ind_article_cv on article(category_id,views);
  3. 3
  4. 4 # 分析语句
  5. 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优化|一分钟带你了解单表优化的更多相关文章

  1. SQL优化 MySQL版 - 单表优化及细节详讲

    单表优化及细节详讲 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:本文章需要MySQL数据库优化基础或观看前几篇文章,传送门: B树索引详讲(初识SQL优化,认识索引):htt ...

  2. MySQL的索引单表优化案例分析

    建表 建立本次优化案例中所需的数据库及数据表 CREATE DATABASE db0206; USE db0206; CREATE TABLE `db0206`.`article`( `id` INT ...

  3. MySQL索引优化(索引单表优化案例)

    1.单表查询优化 建表SQL CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUT ...

  4. Android性能优化:手把手带你全面实现内存优化

      前言 在 Android开发中,性能优化策略十分重要 本文主要讲解性能优化中的内存优化,希望你们会喜欢 目录   1. 定义 优化处理 应用程序的内存使用.空间占用 2. 作用 避免因不正确使用内 ...

  5. mysql 造1亿条记录的单表--大数据表

    读写文件 背景及木:现有数据1000w单表,为压力测试准备1亿条数据. 步骤: 1.将1000w条记录,除id外都导入到多个文件中: //DELIMITER DROP PROCEDURE if EXI ...

  6. MySQL入门,第七部分,单表查询

    首先我们需要了解一下整个数据库的结构 其中Student表中Sno为主键.Study表中Sno和Cno合起来做主键.Course表中Cno为主键 其创建脚本如下: #----------------- ...

  7. MySQL 单表优化

    一.表字段优化 1.整数类型尽量使用 TINYINT.SMALLINT.MEDIUM_INT 而不是INT,非负数要加上UNSIGNED 2.VARCHAR的长度分配要合理,不要过大 3.时间字段不超 ...

  8. 详解MySQL大表优化方案( 转)

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

  9. MySQL 大表优化方案探讨

    当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型 ...

随机推荐

  1. Android Studio 有关 RecycleView 的使用

    •导入相关包 右击File->Project Structure: 搜索  com.android.support: 找到 recyclerview: 导入好后 Sync Now 同步一下,到这 ...

  2. 配置Java环境变量时的一个常见错误

    我们在把JDK路径配置为环境变量时,有一个常用的配置方法,就是把JDK根路径配置为"JAVA_HOME"值,然后在Path中添加一条"%JAVA_HOME%\bin&qu ...

  3. python mac地址计算

    思路是10/16进制的转换和字符串的处理 开始造轮子 1.判断是否是mac地址 正则匹配是否符合条件 1 import re 2 3 def isMac(string): 4 preg = re.co ...

  4. Linux 常用系统性能命令总结

    Linux 常用系统性能命令 查看系统负载top,free **w/uptime  ** 最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU占用CPU的进程可以是Running,也可 ...

  5. .net 预处理指令符的使用

    目录 什么是预处理指令符? 预处理指令符的使用 自定义指令符 使用Visual Studio快速定义指令符 定义指令符区域 什么是预处理指令符? 当C#编译器找到一条预处理指令#if,最后找到一条指令 ...

  6. 批处理文件设置IP以及DNS

    先附上批处理文件代码(批处理文件怎么创建自己另行百度,这里不再赘述) Echo offecho ==============请输入序号修改办公区===========echo *********1.家 ...

  7. 如何用 Electron + WebRTC 开发一个跨平台的视频会议应用

    在搭建在线教育.医疗.视频会议等场景时,很多中小型公司常常面临 PC 客户端和 Web 端二选一的抉择.Electron 技术的出现解决了这一难题,只需前端开发就能完成一个跨平台的 PC 端应用.本文 ...

  8. Numpy 对于矩阵的操作持续更新

    >>> import numpy as np >>> a = np.random.randint(10,size=(5,5)) >>> a arr ...

  9. 面试系列<3>——java并发

    面试系列--java并发 一.使用线程 有三种使用线程的方法: 实现Runnable接口 实现Callable接口 继承Thread类 实现 Runnable 和 Callable 接口的类只能当做一 ...

  10. MSSQL数据库清理Log 压缩数据库日志文件

    dump transaction 数据库名 with no_log go dbcc shrinkdatabase(数据库名)