SELECT * 会导致查询效率低的原因

这篇具有很好参考价值的文章主要介绍了SELECT * 会导致查询效率低的原因。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

因为 SELECT * 查询语句会查询所有的列和行数据,包括不需要的和重复的列,因此它会占用更多的系统资源,导致查询效率低下。而且,由于传输的数据量大,也会增加网络传输的负担,降低系统性能。

如果需要查询所有的列数据,可以使用 LIMIT 关键字限制查询的行数,避免传输过多的数据。在实际开发中建议指定列名,避免使用 SELECT * 。

一、适合SELECT * 的使用场景

SELECT * 是 SQL 语句中的一种,用于查询数据表中所有的列和行。它的使用场景有以下几种:

  • 初学者的练习:当学习 SQL 语言的初学者没有掌握如何选择特定的列时,可以用 SELECT * 来查看完整的数据表结构,这有助于更好地理解数据表的组成。
  • 快捷查询:当需要查询数据表中所有的数据时,SELECT * 可以快捷地查找到所有的数据,省去了手动输入列名的麻烦。
  • 在某些情况下,使用 SELECT * 可以使 SQL 语句更加简洁明了,让代码更易于维护和修改。

但SELECT *也有一些潜在的风险,比如 SELECT * 可能会导致查询效率低下、数据冗余和安全问题等。

二、SELECT * 会导致查询效率低的原因

2.1、数据库引擎的查询流程

数据库引擎的查询流程通常包含以下几个步骤:

  1. 解析 SQL 语句:数据库引擎先将 SQL 语句解析成内部的执行计划,包括了查询哪些数据表、使用哪些索引、如何连接多个数据表等信息。
  2. 优化查询计划:数据库引擎对内部的执行计划进行优化,根据查询的复杂度、数据量和系统资源等因素,选择最优的执行计划。
  3. 执行查询计划:数据库引擎根据执行计划,通过 I/O 操作读取数据表的数据,进行数据过滤、排序、分组等操作,最终返回结果集。
  4. 缓存查询结果:如果查询结果集比较大或者查询频率较高,数据库引擎会将查询结果缓存在内存中,以加速后续的查询操作。

以MySQL为例:

执行一条select语句时,会经过:

  1. 连接器:主要作用是建立连接、管理连接及校验用户信息。
  2. 查询缓冲:查询缓冲是以key-value的方式存储,key就是查询语句,value就是查询语句的查询结果集;如果命中直接返回。注意,MySQL 8.0已经删除了查询缓冲。
  3. 分析器:词法句法分析生成语法树。
  4. 优化器:指定执行计划,选择查询成本最小的计划。
  5. 执行器:根据执行计划,从存储引擎获取数据,并返回客户端。

SELECT * 会导致查询效率低的原因,# MySQL,sql,mysql,postgresql,nosql,数据库,数据库开发,select

2.2、SELECT * 的实际执行过程

当使用 SELECT * 查询语句时,数据库引擎会将所有的列都查询出来,包括不需要的和重复的列,然后将这些数据传输到客户端。这个过程会涉及以下几个步骤:

  1. 执行解析 SQL 语句:当数据库引擎接收到 SELECT * 查询语句时,会首先解析该语句,确定需要查询哪些数据表,以及如何连接这些数据表,然后将解析结果保存到内部的执行计划中。
  2. 执行查询计划:根据执行计划,数据库引擎会扫描相应的数据表,读取所有的列和行数据,然后将这些数据传输到客户端。
  3. 数据传输到客户端:一旦查询完成,数据库引擎将查询结果集发送到客户端,包括所有的列和行数据。

由于 SELECT * 查询语句会查询所有的列和行数据,包括不需要的和重复的列,因此它会占用更多的系统资源,导致查询效率低下。而且,由于传输的数据量大,也会增加网络传输的负担,降低系统性能。

2.3、使用 SELECT * 查询语句带来的不良影响

  1. 查询效率低下:由于 SELECT * 查询语句会查询所有列和行数据,包括不需要的和重复的列,因此会占用更多的系统资源,导致查询效率低下。
  2. 数据冗余:使用 SELECT * 查询语句可能会查询出不必要的重复数据,增加数据库的存储空间,降低数据库的性能。
  3. 网络传输负担增加:由于 SELECT * 查询语句会传输所有的列和行数据,因此会增加网络传输的负担,降低系统性能。
  4. 安全问题:如果数据表中包含敏感信息,使用 SELECT * 查询语句可能会泄露敏感信息,引发安全问题。

所以,建议选择具体的列进行查询。如果需要查询所有的列数据,可以使用 LIMIT 关键字限制查询的行数,避免传输过多的数据。

三、优化查询效率的方法

(1)SELECT 显式指定字段名。SELECT 显式指定字段名的优势:

  • 减少不必要的数据传输 。

  • 减少内存消耗。

  • 提高查询效率

  • SELECT 显式指定字段名的注意事项: 掌握数据表结构、避免指定过多的字段 、避免频繁修改查询语句。

(2)使用索引。

(3)减少子查询。

(4)避免使用 OR 操作符。

四、总结

SELECT * 的不良影响:

  • 查询效率低下;
  • 数据冗余;
  • 网络传输负担增加;
  • 安全问题。

显式指定字段名的优势:

  • 查询效率更高;
  • 减少数据冗余;
  • 网络传输负担减少;
  • 更好的代码可读性;
  • 提高安全性。

优化查询效率的方法:

  • 显式指定需要查询的字段名;
  • 使用 LIMIT 关键字限制查询的行数;
  • 优化索引,提高查询效率;
  • 避免在 WHERE 子句中使用函数或表达式,以免影响查询效率;
  • 避免使用子查询,以免引起性能问题;
  • 合理使用 JOIN,避免查询结果集过大。

SELECT * 会导致查询效率低的原因,# MySQL,sql,mysql,postgresql,nosql,数据库,数据库开发,select文章来源地址https://www.toymoban.com/news/detail-522535.html

到了这里,关于SELECT * 会导致查询效率低的原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MySQL之select查询

    SQL: 结构化查询语言 (Structured Query Language),在关系型数据库上执行数据操作、数据检索以及数据维护的标准语言。使用SQL语句,程序员和数据库管理员可以完成如下的任务。 改变数据库的结构 更改系统的安全设置 增加用户对数据库或表的许可权限(root和普通用户的权限)

    2024年02月19日
    浏览(41)
  • Mysql select查询练习

    目录 (一)  1、查询出部门编号为30的所有员工:  2、所有销售员的姓名、编号和部门编号: 3、找出奖金高于工资的员工: 4、找出奖金高于工资60%的员工: 5、找出部门编号为10中所有经理,和部门编号为20中所有销售员的详细资料: 6、找出部门编号为10中所有经理,部门

    2024年02月16日
    浏览(67)
  • 【MySQL】——Select查询语句(其二)

    🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL:数据结构_IT闫的博客-CSDN博客 🐠数据结构:​​​​​​数据结构_IT闫的博客-CSDN博客 💎C++:C++_IT闫的博客-CSDN博

    2024年02月08日
    浏览(51)
  • MySQL数据库——MySQL SELECT:数据表查询语句

    在 MySQL 中,可以使用 SELECT 语句来查询数据。查询数据是指从数据库中根据需求,使用不同的查询方式来获取不同的数据,是使用频率最高、最重要的操作。 SELECT 的语法格式如下: 其中,各条子句的含义如下: {*|字段列名} 包含星号通配符的字段列表,表示所要查询字段的

    2024年02月05日
    浏览(80)
  • MySQL Select 查询语句详解及高级用法

    MySQL是一个开源的关系型数据库管理系统,支持多种操作语言,其中最基础、最常用的命令之一就是SELECT语句。在本篇文章中,这里将详细介绍MySQL SELECT语句的各个方面,从最基本的查询语句,到更高级的技巧和功能。 SELECT语句用于从表格中检索数据。其基本语法如下: sq

    2024年02月08日
    浏览(46)
  • 【MySQL 数据查询】:提高查询的效率

    前言 ✨ 欢迎来到小K的MySQL专栏,本节将为大家带来 MySQL 数据查询的讲解(基本、分组、排序、聚合、分页、条件查询) 一、基本查询 MySQL数据库使用 SELECT 语句来查询数据 ✨ 1、查询多个字段 以下为 MySQL 数据库中查询数据通用的 SELECT 语法: 查询语句中可以使用一个或者

    2024年02月08日
    浏览(70)
  • 【③MySQL 数据查询】:提高查询的效率

    前言 ✨ 欢迎来到小K的MySQL专栏,本节将为大家带来 MySQL 数据查询的讲解(基本、分组、排序、聚合、分页、条件查询) 一、基本查询 MySQL数据库使用 SELECT 语句来查询数据 ✨ 1、查询多个字段 以下为 MySQL 数据库中查询数据通用的 SELECT 语法: 查询语句中可以使用一个或者

    2024年02月10日
    浏览(57)
  • MySQL查询条件OR导致模糊查询失效

    起因:查出来的列表数据,通过查询条件过滤,发现过滤条件并不起作用 检查发现:where查询条件里面有or的过滤条件,用来进行权限控制,模糊查询条件本来是起效果的,但是OR的条件一执行,就有多了些数据 代码: 期望的结果:先查出来所有符合要求的,然后再根据过滤

    2024年01月22日
    浏览(46)
  • 玩转Mysql系列 - 第6篇:select查询基础篇

    这是Mysql系列第6篇。 环境:mysql5.7.25,cmd命令中进行演示。 DQL(Data QueryLanguage):数据查询语言,通俗点讲就是从数据库获取数据的,按照DQL的语法给数据库发送一条指令,数据库将按需求返回数据。 DQL分多篇来说,本文属于第1篇。 基本语法 注意: select语句中不区分大小写

    2024年02月11日
    浏览(32)
  • MySQL多表查询 子查询效率(DQL语句)

    项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种: 一对多(多对一) 多对多 一对一 一对多 部门与员工的关系:一个部门对应多个员工,一

    2023年04月08日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包