锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

1000w的数据表,18s执行的SQL优化到0.22s?

时间:2023-09-28 02:07:02 18s弯头连接器

一.废话不多说直接上去

先看看我的MySQL版本

SELECT VERSION();

表结构

desc test;

id为自增主键,val常规索引。

增加1000w数据,测试操作sql文件较快50w数据43s比直接执行sql比跑后端程序快。

SELECT COUNT(*) FROM test;

新建一张表

CREATE TABLE `test` (   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',   `val` int(10) NOT NULL,   `source` int(10) NOT NULL,   PRIMARY KEY (`id`),   KEY `val` (`val`) ) ENGINE=InnoDB AUTO_INCREMENT=10859137 DEFAULT CHARSET=utf8

我们,当limit offset rows中的offset效率问题很大:

SELECT id,val,source FROM test t WHERE t.val=4 LIMIT 3000000,5;

sql优化改写如下:

SELECT t.id,t.val,t.source FROM test t INNER JOIN (SELECT id FROM test WHERE val=4 LIMIT 3000000,5) b ON t.id=b.id;

时差明显。

我们看一下SELECT id,val,source FROM test t WHERE t.val=4 LIMIT 查询过程3万万,5:

根据索引叶节点的数据。查询叶节点上的主键值到簇索引上所需的所有字段值。

类似下图:

这样,索引列(如图所示)将被完全无用地查询

看第二个sql,

第一次使用索引列(如图),查询要缩短很多

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章