Skip to main content
MySQL 8.0.x 环境配置

接上文MySQL源码下载,现在假设你的环境中已经存在MySQL的源码文件且已经解压完成了。

Linux

这里我把MySQL的源码下载到了/usr/local/src这个位置,这个下载的文件位置纯看个人喜好,我这里是想规范一点,所以放在了Linux中专门放源码文件的地方。

# 进入指定目录,
cd /usr/local/src

# 进入目录
cd mysql-8.0.40/

# 创建打包用的目录,build_output用于存放cmake configure后的输出,data用于mysql存放数据,etc用于存放mysql的启动配置
mkdir -p {build_output,data,src}


MarshioAbout 2 minMySQL源码阅读MySQLC++
MySQL 8.0.x IDE 选择

接上文MySQL环境配置,假设你已经做好前置处理。

Visual Studio Code

插件下载

  • Remote SSH(如果你选择的是服务器或虚拟机,否则不需要)
  • C/C++
  • C/C++ Extension Pack
  • CMake Tools
  • CodeLLDB,你可能会遇到下载失败的情况,此时他会弹出一个选项,让你从浏览器下载,你只需要复制下载链接,在服务器下载即可

MarshioLess than 1 minuteMySQL源码阅读MySQLC++
记一次MySQL查询深入优化--索引类型

前言

书接上回,记一次MySQL查询深入优化--类型不匹配,我们通过修改查询条件里的条件右侧的类型是索引生效了,但是我们知道,优化效果其实不是很明显,:han。

环境及数据准备

  • MySQL 版本:8.0.25
  • 服务器:2c2G (负载很低)

表结构

CREATE TABLE `a` (
  `id` bigint NOT NULL AUTO_INCREMENT ,
  -- ...
  -- 业务数据
  -- ...
  `publish_time` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL ,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`),
  KEY `idx_update_time` (`update_time`),
  KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

MarshioAbout 2 minMySQL查询深入优化源码阅读MySQL索引优化
MySQL 8.0.x 源码阅读问题汇总

CMake Error

在解决问题前,我们需要先了解下什么是cmake文件.

CMake is the de-facto standard for building C++ code, with over 2 million downloads a month. It’s a powerful, comprehensive solution for managing the software build process. Get everything you need to successfully leverage CMake by visiting our resources section.

简译即:cmake是构建c++代码的标准,我感觉可以理解为Java中的Maven(某种程度上)。


MarshioLess than 1 minuteMySQL源码阅读MySQLC++
记一次MySQL查询深入优化--类型不匹配

前言

某一天,产品经理找到我说,我们收到上级反馈,说这个页面的响应有些让人抓狂(修饰后的说法doge),我打开F12查看了响应时间,enmmm,竟然需要耗时12s+。

话不多说,准备动手。

环境及数据准备

由于这里涉及到了业务数据,所以我在这里只能模拟数据进行演示。

MySQL版本:8.0.25

表结构

CREATE TABLE `a` (
  `id` bigint NOT NULL AUTO_INCREMENT ,
  -- ...
  -- 业务数据
  -- ...
  `publish_time` varchar(19) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL ,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  PRIMARY KEY (`id`),
  KEY `idx_update_time` (`update_time`),
  KEY `idx_publish_time` (`publish_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

MarshioAbout 4 minMySQL查询深入优化源码阅读MySQL索引优化