77百科网
当前位置: 首页 生活百科

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

时间:2023-06-29 作者: 小编 阅读量: 2 栏目名: 生活百科

SELECTid,name,priceFROMfilmINNERJOINASLIMUSING复制代码1.2.2使用范围查询有时候可以将LIMIT转化为已知位置的查询,让MySQL通过范围扫描获得到对应的结果。

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

Table of Contents

查询优化

1.1 最大值和最小值的优化

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

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

假设表 film 数据如下:

其中 id 为主键并自增, name 为 varchar 且没有索引

因为 name 没有索引,因为 MySQL 将会进行一次全表扫描。因为 id 为自增,那么我们可以当作,第一次找到 name=’西游记’ 时, id 就为我们想要的结果,此时我们可以改写 SQL 问:

select id FROM film where name = '西游记' limit 1;复制代码

此时当查到第一条记录时,就会停止继续查询,获得更高的性能。

1.2 优化 limit 分页

在系统进行分页操作的时候,当偏移量大时,例如: limit 10000,20 时, MySQL 需要查询 10020 条记录然后只返回 20 记录,前面的记录全部被舍弃,这样的代价非常高

SELECT id, name, price FROM file LIMIT 10000 OFFSET 20复制代码

上面的 SQL 我想是分页常规的写法,写法没有什么错误,正如上面说到,浪费了大量的性能。

1.2.1 使用关联查询优化

优化此类查询一个简单的方法就是尽可能地使用索引覆盖扫描,而不是查询所有的列,然后根据需要做一次关联操作再返回所需的列。对于偏移大的时候,这样做的效率提升非常大。

SELECTid, name, priceFROM filmINNER JOIN (SELECT idFROM filmLIMIT 10000 OFFSET 20) AS LIM USING(id)复制代码

1.2.2 使用范围查询

有时候可以将 LIMIT 转化为已知位置的查询,让 MySQL 通过范围扫描获得到对应的结果。例如,如果在一个位置列上有索引,并且预先计算出了边界值,则改写查询为:

SELECT id, name, priceFROM filmWHERE position BETWEEN 10000 AND 10020ORDER BY position复制代码

1.2.3 利用唯一自增序列进行查询

这里的唯一自增序列可以是自增 id 主键,也可以其他的具有唯一和升序的数字即可

在前面的思路中,我们考虑的都是传入页数和每页数量,在一些操作中可以改为传入上一次查询到的自增序列,然后往后查询对应的每页数量即可。

例如原来要求前端传入页数(pageIndex)和 每页数量(pageSize), 此时的 SQL 为

select * from film limit (pageIndex -1) * pageSize OFFSET pageIndex * pageSize复制代码

如果改为让前端传入最后一次查询到结果的 自增序列(sid) 和 每页数量(pageSize)

比如这时的自增序列(sid) 就是 film 的 id, 则 SQL 可以改写成

select * from film where id > sidlimit pageSize复制代码

当查第一页的时候,sid 传入 0 即可,查第二页的时候,传入获取第一页时最后得到 id 即可

防止被优化

在写 SQL 的时候,除了要考虑优化 SQL 降低执行时间外,有时还要防止 SQL 被 MySQL 本身给你优化掉,造成执行结果和你想象的不一样。

在 MySQL 使用 group by 语句进行查询时,当有多条数据都满足时,会显示第一条数据例如:

假设表 film 数据如下:

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

但在一些数据重复时,我们往往想要最后一条数据, 这是我们会想到通过子查询的形式先排序后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;复制代码

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

    推荐阅读
  • 柳州职业技能鉴定补贴申请时间(柳州职业资格证书补贴)

    柳州职业技能鉴定补贴申请时间:周一至周五:上午:8:00-12:00,下午:15:00-18:00(法定节假日除外)鉴定补贴申请条件:培训鉴定结束并取得证书后,培训机构向市就业服务中心申请鉴定补贴鉴定补贴申请窗口信息:申请地点:屏山大道19号柳州就业服务中心创业指导课4号窗口办理联系电话:0772-3803003交通指南:鱼峰山公园对面,快9、70路、6路都可到达办理材料内容:1.柳州市享受补贴人

  • 红楼梦鸳鸯结局(红楼梦鸳鸯结局怎么样)

    《红楼梦》当中鸳鸯结局是她自杀了,我来为大家讲解一下关于红楼梦鸳鸯结局?跟着小编一起来看一看吧!在《红楼梦》当中,贾赫想要迎娶鸳鸯做自己的妾,但是鸳鸯不肯屈从,并且在贾母等人面前发誓一辈子不嫁人,忠心的伺候贾母。她借助贾母在晚年生活上需要自己的帮助,从而顶住了贾赫的威逼利诱,在贾母去世以后,鸳鸯知道自己最终逃不过贾赫的手心,她不想要任人玩弄,于是悬梁自尽,用自己的生命来保住了自己的清白。

  • 社保手续流程图(社保操作流程)

    社保手续流程图点击辽宁省人力资源和社会保障公共服务平台-“单位登录”等待页面跳转至“辽宁省政务网”登录页面。填写完基本信息后,点下一步,继续填写企业认证信息。

  • 信的女儿是亲生的吗(你相信吗)

    信的女儿是亲生的吗小丸子是阿信的亲生女儿,他从未踏入结婚礼堂却是单亲爸爸,小丸子是他年少轻狂时留下的,现在6岁了,因为阿信的妈妈每次都给她剪成一刀平的刘海,所有人看了都说特别像电视里的樱桃小丸子,所以就叫她小丸子了。信,本名苏见信,1971年5月14日出生于台湾省,中国台湾男歌手、演员,毕业于华冈艺校。2002年,加入摇滚乐团“信乐团”并担任主唱;同年,随信乐团推出首张音乐专辑《信乐团同名专辑》,从而正式出道。

  • 在家怎么做好吃的炸萝卜丸子(炸萝卜丸子怎么做)

    原料准备:萝卜500克,面粉300克,淀粉300克,肉馅300克,鸡蛋1个,葱姜蒜末15克,白糖5克,味精3g,鸡粉3克,十三香3克;,接下来我们就来聊聊关于在家怎么做好吃的炸萝卜丸子?以下内容大家不妨参考一二希望能帮到您!

  • 西门子冰箱行不行(西门子冰箱200元处理了)

    西门子冰箱行不行我2017年从曹妃甸区唐山百货大楼买的西门子冰箱。2021年春节大年初二,冰箱突然出现报警且制冷不稳定,在-20至2度间循环,噪音增大。报售后热线,西门子维修平台告诉我3天内会收到维修师傅电话。我跟师傅解释,我家楼上一块买的同型号西门子冰箱,他家用着没问题,可维修师傅说跟西门子总部问了,技术人员说很有可能是电源问题。西门子承诺维修收费须按维修细目收费,用户签字确认,可售后根本没有做。

  • 清新区6月2日到苗信息

    21点清新区新冠病毒疫苗大型临时接种点开放“粤苗”APP网上个人预约接种先到先得,约满即止。请预约成功的居民朋友严格按照预约的时间段前往接种点,接种疫苗未预约成功的不安排接种。

  • 什刹海电视剧在哪里播(什刹海什么时候播)

    什刹海电视剧在哪里播该剧于2020年7月10日在中央电视台综合频道首播,并在腾讯视频、爱奇艺和优酷视频同步播出。《什刹海》是由华夏视听、维乐嘉禾影业、猫眼娱乐联合出品,付宁编剧并执导,刘佩琦、连奕名、曹翠芬、张龄心、关晓彤、张晞临、刘敏、龙飞领衔主演,吴磊、牛莉友情出演的都市家庭剧。该剧以北京什刹海胡同里庄为天一家三代人的生活工作与学习为主线,讲述一家人现代琐碎而又充满烟火气息的生活日常。

  • 结婚是件疯狂的事(自称和他结婚是件疯狂事)

    应采儿情话刚说完,没等陈小春有感动的时间就画风一转,开始爆料两人第一次见家长的情景。难怪连应采儿自己都吐槽可以和陈小春演父女了。虽然应采儿和陈小春的年龄悬殊较大,但感情生活丝毫不受影响。在《妻子的浪漫旅行》一开始的时候,应采儿对陈小春说觉得自己活得不够偶像剧,想要尝试另一种生活方式。私下的陈小春,话少性格沉闷,脾气暴躁。应采儿则是大大咧咧,活泼开朗,脾气比陈小春还要火爆。