SQL优化案例分析01

2019-07-14  本文已影响0人  young十三

一、问题

在对Mysql数据库查询时,我们经常会对SQL语句进行优化,以此来提高我们的查询效率。有时一个小小的改动,对于大数据量的表来说,可能有成倍的提升效果。

二、建测试表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for person
-- ----------------------------
DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userId`  int(11) DEFAULT NULL,
  `userName` varchar(64) DEFAULT ULL,
  `age` varchar(64) DEFAULT NULL,
  `comment` varchar(500) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=201 DEFAULT CHARSET=utf8;

SET FOREIGN_KEY_CHECKS = 1;

其中,userId字段上增加了索引

三、测试数据

可以通过python脚本批量导入测试数据,可参考我之前的文章,Python应用02--批量往Mysql数据库插入数据
测试目标:10w+数据

四、SQL分析

以下SQL是模拟场景,一个用户在不同age(区间0-100不等)阶段提交了多条记录,一个age可以出现多条记录,不必纠结表设计是否合理,可自行转换为相应业务表

1、小白写的SQL

select  *  from person where userId = 730 and  age = '18'  order by id desc limit 1000;

2、大神写的SQL

select p.* from
(select  *  from person where userId = 730 order by id desc limit 1000) p
where p.age = '18'

如果你能分析其中的利弊,说明你达到3年以上的Java开发工作经验。

3、2条SQL实验结果

在10w+数据量下,大神写的sql速度比小白的快5.5倍

五、总结

大神写的SQL相比较于小白在索引的检索上快,合理的利用单列索引,但是也有一定的缺点,大神检索的条数在某些情况下是大于等于小白检索的条数,具体场景具体分析,本实验主要是研究其中的原理。

路漫漫其修远兮,吾将上下而求索!

上一篇 下一篇

猜你喜欢

热点阅读