sql给字段添加默认值(sql默认值怎么设置)

使用 limit 优化查询和防止SQL被优化

Table of Contents

查询优化

1.1 最大值和最小值的优化

对于 MIN() 和 MAX() 查询, MySQL 而且优化做得并不是太好,例如

select MIN(id) FROM film where name = '西游记';复制代码

假设表 film 数据如下:

sql给字段添加默认值(sql默认值怎么设置)

则执行SQL select * from film group by name , 则结果为:

sql给字段添加默认值(sql默认值怎么设置)

但在一些数据重复时,我们往往想要最后一条数据, 这是我们会想到通过子查询的形式先排序后group by 如下:

select *from ( select * from film order by id desc) as film_orderedgroup by name;复制代码

执行后发现结果没变, 这是因为 MySQL5.7 会对子查询进行优化,认为子查询中的 order by 可以进行忽略,只要Derived table里不包含如下条件就可以进行优化:

  • UNION clause
  • GROUP BY
  • DISTINCT
  • Aggregation
  • LIMIT or OFFSET

根据上面说明,我们可以使用 limit 阻止子查询优化,改写后SQL

select *from ( select * from film order by id desc limit 10000000) as film_orderedgroup by name;复制代码

这样结果就符合我们想要的了

(0)
小多多的头像小多多创始人

相关推荐

发表回复

登录后才能评论