mysql 优化 (二)
优化 主要 是 对索引 的优化
/* Navicat Premium Data Transfer Source Server : 192.168.0.197 Source Server Type : MySQL Source Server Version : 80027 Source Host : 192.168.0.197:3306 Source Schema : Product Target Server Type : MySQL Target Server Version : 80027 File Encoding : 65001 Date: 23/12/2023 18:14:29 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for Category -- ---------------------------- DROP TABLE IF EXISTS `Category`; CREATE TABLE `Category` ( `Id` int NOT NULL, `Name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`Id`) USING BTREE, INDEX `Id_Name`(`Id`, `Name`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of Category -- ---------------------------- INSERT INTO `Category` VALUES (1, '冰箱'); INSERT INTO `Category` VALUES (2, '彩电'); -- ---------------------------- -- Table structure for Products -- ---------------------------- DROP TABLE IF EXISTS `Products`; CREATE TABLE `Products` ( `Id` int NOT NULL, `Name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `CategoryId` int NULL DEFAULT NULL, `Price` decimal(10, 2) NULL DEFAULT NULL, PRIMARY KEY (`Id`) USING BTREE, INDEX `CategoryId_Name`(`CategoryId`, `Name`, `Price`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of Products -- ---------------------------- INSERT INTO `Products` VALUES (1, '长虹冰箱', 1, 22.00); INSERT INTO `Products` VALUES (2, '海信电视', 2, 11.00); INSERT INTO `Products` VALUES (3, '长城电脑', 3, 1230.00); SET FOREIGN_KEY_CHECKS = 1;
建立 表 和数据
Products 表

Category 表

没有 加索引的时候 是全表扫描

加索引 的以后的

语句 还有 or 的情况 可以 在索引中 添加 or 查询的字段 实现索引覆盖

添加 CategoryId 字段

实现 索引覆盖 就不能 使用 *(米字符)这样就不用回表查询提高查询速度

模糊查询 最右 全表扫描

模糊查询 包含 全表扫描

模糊查询 查询 最左前缀

两表 连接 注意 联合 索引的 顺序 如果顺序不对 也会影响查询效率
Explain select Products.Price from Products inner join Category on Products.CategoryId = Category.Id
索引 顺序 为
`Name`, `CategoryId`, `Price`

如果 修改顺序 为
`CategoryId`, `Name`, `Price`
效率 提升

总结 select 要指定 列名 便于 覆盖索引 索引顺序 要排列好 多表连接 放前边 where 字段 排重之后 多的排前面 有or查询 的 要指定列名 便于覆盖索引
浙公网安备 33010602011771号