SQL优化案例分析01

Python publisher01 24℃ 0评论

一、问题

在对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实验结果

五、总结

充分利用索引,实现它的价值,遵循小结果集驱动大结果集。

你或许想:《去原作者写文章的地方

转载请注明:Python量化投资 » SQL优化案例分析01

喜欢 (0)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址