城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

8个提升SQL性能的Tips,每个后端都应该知道

2月2日 颜如初投稿
  作为一名后端程序员,可以说天天都要跟数据库打交道,不管使用的是MySQL,Oracle还是SQLServer,毫无疑问都逃不开SQL,所以日常工作中对于SQL的性能优化可谓说十分重要。今天阿粉就带大家看一下,每个后端程序员都应该知道的十个提升查询性能的技巧。1、使用Exists代替子查询
  子查询在日常的工作中不可避免一定会使用到,很多时候我们的用法都是这样的:SELECTId,NameFROMEmployeeWHEREDeptIdIn(SELECTIdFROMDepartmentWHERENamelikeManagement);
  相信大家平常肯定都是这样来使用的,其实还有一种更好的方法,如下所示:SELECTId,NameFROMEmployeeWHEREDeptIdExist(SELECTIdFROMDepartmentWHERENamelikeManagement);
  这里我们使用exist关键字而不是In关键字,当然如果在数据量不大的时候,两种方式都可以,但是当数据量很大的时候,exist的方式会比in的方式效率高很多。因为Exist函数根据查询结果返回一个布尔值,速度会快很多。2、适当的使用JOIN来代替子查询
  除了上面的exist之外在有些场景我们可以使用JOIN来替换子查询,毕竟子查询的效果是很差的,如下所示:SELECTId,NameFROMEmployeeWHEREDeptIdin(SELECTIdFROMDepartmentWHERENamelikeManagement);
  使用JOIN的方式如下:SELECTEmp。Id,Emp。Name,Dept。DeptNameFROMEmployeeEmpRIGHTJOINDepartmentDeptonEmp。DeptIdDept。IdWHEREDept。DeptNamelikeM3、使用Where替代不必要的Having
  对于where的使用相信大家都很擅长,但是对于Having的使用可能平时用得不多,阿粉这里只能说:用得不多,挺好的!对于Having我们是能不用就不用不到万不得已的时候不要用,说真的阿粉工作这么多年,真没有使用Having的场景。我们先看下面的示例:
  Having的用法SELECTEmp。Id,Emp。Name,Dept。DeptName,Emp。SalaryFROMEmployeeEmpRIGHTJOINDepartmentDeptonEmp。DeptIdDept。IdGROUPBYdept。DeptNameHAVINGEmp。Salary20000;
  Where的用法SELECTEmp。Id,Emp。Name,Dept。DeptName,Emp。SalaryFROMEmployeeEmpRIGHTJOINDepartmentDeptonEmp。DeptIdDept。IdWHEREEmp。Salary20000;
  为什么说Having的性能没有Where高呢?那是因为Where是一种精确的匹配,但是Having是需要配合GroupBy来配合使用,只要涉及到GroupBy自然就效率高不起来了。4、使用精确的字段类型
  有些小伙伴为了系统的可扩展性或者压根就不知道该把数据库字段的类型设置什么,所以就全部使用char或者varchar,总觉得这样更灵活,但是往往这个时候是对系统的最大隐患。
  在使用时间类型的字段的时候,就需要设置成DateTime,不能用在使用标识是否删除的时候就应该使用tinyint,能用varchar的就不要用对于大字段text需要独立出来,这样在查询的时候就不会影响性能;对于能设置成唯一键的就需要设置成唯一键,因为你永远无法避免程序会出现脏数据,要在数据层保证一致性。5、使用批处理代替循环
  在插入数据的时候的,我们可以使用values来批量进行插入,而不是通过循环来进行单条数据的查询,如下所示:不可取For(Inti0;i5;i){INSERINTOTable1(Id,Value)Values(i,Valuei);}推荐INSERTINTOTable1(Id,Value)Values(1,Value1),(2,Value2),(2,Value3),(4,Value4),(5,Value5);
  不过要注意values后面的数量也是有限制的,所以两者可以结合使用,具体的可以根据表字段的多少来决定分多少批来执行。另外这里有一个注意的点,很多系统都会底层做操作日志,而且很多时候可能是SQL级别的,那这个时候就需要注意,记录操作日志的表的字段是有长度限制的,这里整个SQL的长度是不能超过日志字段的长度的。6、使用UNIONALL替代UNION
  在使用联合查询的时候,很多时候我们会使用到UNIONALL或者UNION来联合多个表,进行汇总。那么UNIONALL和UNION的区别是什么呢?这两个的区别是UNIONALL会返回联合后的所有行记录,而UNION是会进行去重后返回。
  比如说我们有两张表teacher和student,里面的数据分别是下面
  这里这两张表当中,存在相同的一条数据,就是(4,马六)这一条数据,我们可以看看使用UNIONALL和UNION的效果
  可以看到第二次的查询结果中已经少了一行,说明我们上面说的UNION会去重的逻辑是存在的,而且去重是全字段都相同的时候才会被去重。7、用精确的字段代替
  另一个比较影响性能的点是使用,很多小伙伴为了省事,在编写查询语句的时候,会使用来代替所有的字段,其实并不是说这种写法有什么问题,只是这种写法有点不可控,使用表示要查询所有字段,当我们的表是一个很简单的表,而且里面的字段都是一些小字段的时候,使用完全是可以的。
  但是如果是对于一些大表特别是有text这种大字段的表,或者是一些敏感数据的表,我们还使用号去查询数据的话,就会有很大的问题了,一方面是有安全隐患,一方面还是增加磁盘,内存和网络的传输,完全得不偿失。8、给必要的字段增加索引
  索引作为数据库里面一个很重要的内容,相比大家都不陌生,给必要的字段加上索引也是很有必要的,除了主键索引,我们还可以添加聚簇索引和唯一索引,关于索引的内容感兴趣的可以去看看我们的这篇文章面试官问我索引为什么这快?我好像解释不清楚了,这里阿粉就不细说了。总结
  后端程序员除了跟服务器打交道之外最多的就是跟数据库打交道了,如何在数据库层面提效也是一个长久的话题,这也是为什么数据库能得到发展的原因,从关系型数据库到NoSQL数据库,从MySQL到ClickHouse,数据库行业也在长久的发展。
投诉 评论 转载

为什么曾经祸害我们的电脑病毒,如今已经消失不见不知道你们第一台电脑是什么时候买的呢?但是不管什么时候买的,几乎所有人都经历过电脑病毒吧。曾经的我就遇到过不少的电脑病毒,那种病毒基本上就是破坏你的电脑系统,让你无法正常开机。……中国国家公园,为孩子们打开了一扇了解自然和国家公园的科普《中国国家公园》是一套足不出户,便可给孩子科普自然与国家公园的精美绘本。《中国国家公园》这套绘本,共分为三册,分别是《大熊猫国家公园》、《三江源国家公园》、《普达措国家公……说实话,他的塌房是我没有想到的娱乐圈每年都有那么几个明星人设崩塌,我们从最初的大吃一惊,到现在的淡定吃瓜,他们功不可没。但是,他的塌房是我没有想到的。明星可以说要金钱有金钱,随随便便日入过万,月入过千……巨幕屏不要万元,小米这款人气太高了一台86英寸的4KHDR高刷巨幕屏电视要多少钱?或许在当前市场中一些一二线品牌该尺寸的电视至少要万元!但红米这台86英寸电视L86R6MAX仅需5999元,可谓是市场中的搅局者……上美团买iPhone,半小时送达,京东遇到了更快的对手借iPhone14东风,美团直捣京东腹地每年新款iPhone上市时都会掀起新一轮狂欢,今年iPhone14发布后,美团带头发起了iPhone14配送大战。现货最快半……中秋吃蟹,别再清蒸啦,推荐好吃的葱姜桂花炒蟹,鲜香肥美超诱人几度秋意来,最是桂花香。作为中国传统的名贵花木,桂花在秋天有着不可替代的意义。每年秋天,吐蕊开花,除了它的芳香,最让人难忘的便是它的味道,桂花入馔、入酒已然成为了秋……总提不起精神感觉浑身乏力还常伴有失眠头晕?小心这得这个病你是否常常有这些感觉?早晨起床后总感觉没睡醒,浑身疲累,白天工作也是毫无效率,整天浑浑噩噩地提不起精神,还常伴有头昏脑涨,甚至出现心悸气短、腰酸腿困、食欲减退的症状,如果有,那……白垩纪时代动植物是如何灭绝的白垩纪是中生代的最后一段。霸王龙和副栉龙生活在白垩纪时期。白垩纪是中生代最后也是最长的一段。它持续了大约7900万年,从大约1。45亿年前侏罗纪时期的小灭绝事件到6……vivo火力不停歇,12G256G骁龙8,7英寸2K大屏手机vivo已经官宣,新旗舰机将首发天玑9200旗舰芯片,具体机型为vivoX90Pro,最近很多人把目光都集中在了这款手机上,相关的配置、外观和发布时间曝光,据说11月22日推出……8个提升SQL性能的Tips,每个后端都应该知道作为一名后端程序员,可以说天天都要跟数据库打交道,不管使用的是MySQL,Oracle还是SQLServer,毫无疑问都逃不开SQL,所以日常工作中对于SQL的性能优化可谓说十……实体经济如此惨淡,怪谁?还记得王健林和马云打的那个一个亿的赌吗?2020年,如果电商在中国零售市场份额占到50,王健林给马云一个亿,如果没有,帽由马云给王健林一个亿,没想到刚过半年,王健林就认输,给没……冷风里各自盼安好每一个承诺,变成音符停留在音乐深处。眼泪不停的幸福涌出。很感动,因为他们都爱的很投入,很投入,因为他们是彼此的全部,就算再辛苦,他们也要不停的付出……
当代人夏季必喝的一款茶,散寒气,补阳气,温脾胃,好处说不完提前打卡武商梦时代WS热雪奇迹室内游冰雪小镇,15分钟能造3凌晨看完万里归途,我心情复杂,写下了这篇文章二十大时光北京蓝图京津冀三地,同心共发展灵魂相似的人总会相知相逢土炮发威武磊帽子戏法,张玉宁收获第13球,郜林00后梅开二度与富商纠缠11年,转身嫁给男闺蜜,46岁的李小冉就这样改写了移动影像看华为,大屏影像看海信古代世界七大奇迹建筑,你都知道哪几个?考虑抵制北京冬奥?德国奥委会主席怒批候任外长不要太过分鲁豫瘦到病态,看脖子像六七十岁的老太太,穿起球的套装略寒酸广东官宣新注册3人,朱芳雨信心满满,坚持自主培养,打磨新阵容
多生个孩子奖励1。8万!一线城市杯水车薪放三四线城市效果显著屈楚萧被前女友怒撕!女方晒出虐待图,自曝被男方逼着自扇巴掌白露前后,超市这3白3绿建议少吃,反季难吃没营养,还浪费钱胃不舒服到底能吃酸奶吗五菱和东风谁更懂老百姓?征程和菱智全面对比,差距一目了然刺客信条瓦尔哈拉正在改变进程并提供非暴力选择隋炀帝被杀前承认确实对不起老百姓大学生买台式电脑还是买笔记本电脑好?七仔说八卦刘宇汽车代言,李亚鹏回娱乐圈,李沁王一博杨幂年月中国电视广告效果评估排行榜古力娜扎肤白胜雪晶莹剔透【歌词】EverythingIWanted歌手:Dannii

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁