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查询 的 要指定列名 便于覆盖索引

 

posted on 2023-12-23 20:45  是水饺不是水饺  阅读(11)  评论(0)    收藏  举报

导航