一文讲解如何写出高效精致SQL

这篇具有很好参考价值的文章主要介绍了一文讲解如何写出高效精致SQL。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

尽量避免select * from,仅返回所需字段

        在日常查询表数据时,经常不自觉的写select * from,查询全部字段信息;虽然记录少的单表没啥感觉,但当关联多个表且表体量大时,select * from将返回所有表的字段,会影响查询效率。较好的方式,就是需要什么查什么,仅返回所需字段信息;这也符合开发中的最少知道原则,尽量不去暴露不需要的信息。

避免全量查询,尽量小的控制查询粒度

        日常开发环境查询中,可能随手就写了select * from tableA,这样的查询将返回全部记录和全部字段,这样的查询如果误升级到生产环境,查询太慢可能会带来灾难性的后果。全表扫描是一种低效的查询方式,应尽量避免。通过使用索引、合适的过滤条件和JOIN优化,减少全表扫描的情况。所以,在查询时时,习惯性的增加where条件过滤(比如分页、字段过滤、日期区间等),返回尽量小的数据,这将大大提升查询效率。

查询时尽量走索引,最好提前设计好索引

        当单表记录数太多时,而且通过非索引字段进行表关联查询时,查询效率很低;此时对关联字段建立索引,将大大提升查询效率。所以,在设计表时,最好就考虑业务场景,对常用来过滤查询或者表关联的字段,建立索引,将对后续查询大有裨益。同时,在查询过程中,也尽量走索引查询,比非索引查询效率高太多了。

尽量避开索引失效的场景

        索引虽好,但使用不当,可能起不到想要的效果,这其中就需要重点关注索引失效的情况,并尽量避免之

        索引失效的场景主要有:

  • 联合索引不满足最左匹配原则
  • 使用select * 查询
  • 使用索引列进行表达式运算
  • 索引列使用了内置函数
  • 错误的使用like模糊查询
  • 索引列进行类型隐式转换
  • 使用or操作
  • 使用>,<,!=等进行索引列比较
  • 使用is not null
  • 使用not in和not exixts
  • 错误的order by 排序

Update时避免全量修改,只修改需要的字段

        在修改表记录时,一些随手操作就是updateById(Entity entity),虽然也能更新成功,但注意sql会发现,他把Entity 的全部字段都更新了一遍,而我们可能仅仅只想修改个状态字段。而后者的只用修改少量字段的效率显然比全量修改要高,更重要的是,能避免其他字段被误修改,导致一些其他问题。

尽量使用数值替代字符串类型

  1. 节省存储空间:数值通常比字符串类型占用更少的存储空间。在大规模的数据集中,使用数值类型可以显著减少数据库的存储需求,从而提高系统的性能和效率。

  2. 提升查询性能:在数据库查询时,比较数值类型通常比比较字符串类型更快。因为数值类型可以直接进行比较操作,而字符串类型则需要逐个字符比较    

慎重选择“硬删除”重要数据

        删除数据很爽,但也很有风险,尤其是误删除了重要数据。删除数据,通常有物理删除(硬删除)、逻辑删除。但无论是哪种删除,都要注意限定条件,不要把数据全删了,不要都得跑路了。

        物理删除,可以节省内存空间,同时保证表里只有有效的数据,可读性好。但是物理删除话,数据大概率不会恢复。而逻辑删除的话,虽说更安全一点,但是一定程度污染的表数据,后续每次关联查询,都得记得过滤有效数据。

        对于一些有价值的历史数据,是否可以考虑设计历史表,用来转存被删除的历史数据,一方面,可保证的可追溯,同时也保证了原表数据的简洁和有效性。文章来源地址https://www.toymoban.com/news/detail-485494.html

到了这里,关于一文讲解如何写出高效精致SQL的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是好的FPGA编码风格?(1)--尽量避免组合逻辑环路(Combinational Loops)

             组合逻辑环路 (Combinational Loops):指组合逻辑的输出信号 不经过任何时序逻辑电路 (FF等),而直接 反馈到输入节点 ,从而构成的电路环路。         此外,如果 直接将寄存器的输出端通过组合逻辑反馈到该寄存器的异步端口 (异步复位或异步置位),

    2024年02月05日
    浏览(44)
  • 教你如何将MySQL数据导出为sql文件:避免数据丢失的最佳实践!

    将MySQL数据导出为sql文件 ps:这里警示在命令行处输入密码不安全,无伤大雅,也可以先输入 mysqldump -u root -p 数据库名称 路径:自定义名称.sql,后输入密码 还记得大明湖畔旁的夏雨荷吗?刚刚导出到D盘的sql文件呀

    2024年02月11日
    浏览(43)
  • 一文讲解如何学习 Linux 内核网络协议栈

    协议栈的细节 下面将介绍一些内核网络协议栈中常常涉及到的概念。 sk_buff 内核显然需要一个数据结构来表示报文,这个结构就是 sk_buff ( socket buffer 的简称),它等同于在TCP/IP详解 卷2中描述的 BSD 内核中的 mbuf。 sk_buff 结构自身并不存储报文内容,它通过多个指针指向真正的

    2023年04月08日
    浏览(83)
  • 如何高效优雅的完成一次机器学习服务部署?一文详解部署难点以及实战案例

    伴随着ChatGPT的大火,很多人也逐渐认识到人工智能正在逐步由底层建筑上升到交互服务,其实在没有兴起ChatGPT时,人工智能技术就已经发展的比较成熟了。像是现在机器学习以及深度学习都已经普及在各大高校社区了,而且市场上已经有非常多的目标识别、图像检测等计算

    2023年04月15日
    浏览(39)
  • mysql存在10亿条数据,如何高效随机返回N条纪录,sql如何写

    1 低效方案 1.使用ORDER BY RAND(): SELECT * FROM your_table ORDER BY RAND() LIMIT 1; 这将随机排序表中的所有行,并且通过LIMIT 1仅返回第一行,从而返回一个随机记录。然而,对于大型表来说,ORDER BY RAND()可能会导致性能问题,因为它需要对整个表进行排序。 2 高效方案 2.使用RAND()函数和

    2024年02月06日
    浏览(42)
  • MATLAB | 如何用MATLAB如何绘制各式各样精致的三元相图(ternary plot)

    整了个大活,写了一个能够生成非常精致三元相图的函数,这种图主要用于展示三种变量之间的比例,本期实验绘制效果如下: 编写不易,这个工具写的脑壳痛,求多多点赞,依旧先介绍咋使用,工具函数放在最后,同时提供gitee及fileexchange下载链接,若是日后代码更改会在

    2024年02月01日
    浏览(149)
  • 如何在Flink SQL中轻松实现高效数据处理:最佳实践揭秘Protobuf自定义格式

    目录 Flink SQL Protobuf Format设计要点 1. 引言 2. 为什么需要自定义Protobuf格式  3. 自定义Protobuf格式的

    2024年02月19日
    浏览(43)
  • SQL之优化篇:一文搞懂如何优化线上任务性能,增效降本!

    继上一篇文章:SQL优化之诊断篇:快速定位生产性能问题实践。本文将从优化运行时间和优化资源消耗这两个方面,介绍可以提升作业性能的常用方法。 在优化运行时间这个维度上,我们重点关注时间上的加速,单位时间内可能会消耗更多的计算资源。总成本有可能上升,也

    2024年02月10日
    浏览(42)
  • 什么是路由器后门?如何尽量规避路由器后门带来的风险

    多家路由器厂商的产品存在后门,可能导致个人信息泄漏。挺纳闷的,路由器怎么还能泄漏我的信息?它究竟是怎么工作的? 上周末,根据国家互联网应急中心(CNCERT)发布的数据显示,D-LINK、Cisco(思科)、Linksys、Netgear、Tenda等多家厂商的路由器产品存在后门,黑客可由此直接

    2024年02月06日
    浏览(44)
  • 如何写出高质量代码?

    作为一名资深开发人员,写出高质量的代码是我们必须要追求的目标。然而,在实际开发中,我们常常会遇到各种问题。比如,代码的可读性、可维护性、健壮性和灵活性等,这些都会影响代码的质量。那么,究竟如何才能写出高质量的代码呢? 代码结构清晰易懂,能够使代

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包