数据库表优化分析

2022-04-29  本文已影响0人  engineer_tang

1. 准备数据环境

1.1 建表

CREATE TABLE `t_test_group` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `group_name` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '组名',
  `create_by` bigint(20) DEFAULT NULL COMMENT '创建人',
  `code` varchar(40) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '编码',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

1.2 造数据

先造一些基础数据,然后批量造,批量造使用如下语句:

INSERT INTO `t_test_group`(`group_name`, `create_by`, `code`)
select `group_name`, `create_by`,UUID()  from t_test_group;
image.png

最终造了300万条数据,如下图


image.png

2. 查询分析

2.1 使用主键查询

select * from t_test_group where id= 300000;
image.png
查询使用时间,达到了0.021S,速度非常快,使用主键查询还是很有优势的。
image.png

2.1 使用非主键查询

image.png

使用非主键查询耗时都在3S左右,相比使用主键查询慢很多,相差141倍左右。

2.2 给非主键字段添加索引

image.png

通过给非主键字段添加索引后,查询达到了0.05S左右,速度快了60倍,但和使用主键相比,还是慢了1倍。

2.3 导致索引失效的关键字

2.3.1 关键字"like"

前后都加‘%’的情况:


image.png

使用关键字like查询效率非常低,

只加后'%':

image.png

2.3.2 关键字"in"

image.png

使用关键字IN查询效率很快,说明此时用到了索引,IN不会导致索引失效;另外,3个位置一起查的速度和单个查的速度几乎一样,所以能一起查就尽量一起查。

上一篇 下一篇

猜你喜欢

热点阅读