美文网首页IT修真院_JAVA
为什么不可以用Select * from table?

为什么不可以用Select * from table?

作者: 路盲就是可以看到更多风景 | 来源:发表于2017-10-14 20:00 被阅读120次

select *_腾讯视频

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

先介绍一下mysql数据库

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

MySQL是开放源代码的,因此任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。

MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

select * from table是mysql中用来查询某张表的所有字段的sql语句.

在做复盘项目时,使用公司dal框架有明确规定不能使用select * ,而以前做任务基本我都用的是select *,因为方便快捷,也因为做任务时没有太多的要求.

2.知识剖析

Mysql执行查询的原理

从图中可以看出基本步骤为:

1.客户端发送一条查询给服务器。

2.服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段。

3。服务器端进行SQL解析,预处理,再由优化器生成对应的执行计划

4。MySql根据优化器生成的执行计划,调用存储引擎的API执行查询。

5。返回结果给客户端。

3.常见问题

使用select *语句的缺点

4.解决方案

1、mysql拿到一条命令,会去解析命令、优化查询,然后去存储引擎执行查找.SELECT * 语句取出表中的所有字段,会解析更多的 对象,字段,权限,属性相关,不论该字段的数据对调用的应用程序是否有用,这会对服务器资源造成浪费,导致优化和效率问题,对服务器的性能产生一定的影响。

2、如果表的结构在以后发生了改变,那么SELECT * 语句可能会取到不正确的数据甚至是出错。

3、执行SELECT * 语句时,select *要对表中所有列进行权限检查,这部分也是开销

4、使用SELECT * 语句将不会使用到覆盖索引,不利于查询的性能优化.(索引覆盖:索引覆盖是一种速度极快,效率极高,业界推荐的一种查询方式.就是select的数据列只用从索引中就能够获得,不必从数据表中读取,也就是查询列要被所使用的索引覆盖)

5、在文档角度来看,SELECT * 语句没有列明将要取出哪些字段进行操作,所以也是不推荐的。

6、 select *插入一个表,以后表结构修改了,如增加或删除了一列,对代码影响很大,如果只是恰好只获取自己需要的那几列,表结构的修改对你的代码影响就会比较小

所以我们还是用select 字段名进行查询操作吧.

5.编码实战

6.扩展思考

使用select 字段 的好处

1:是一种严谨且良好的习惯

2:只取出自己需要的字段,便于排版

7.参考文献

http://bbs.csdn.net/topics/390302591?page=1#post-393091122

http://blog.csdn.net/li563868273/article/details/51254907

ppt:https://ptteng.github.io/PPT/PPT-java/select.html#/

相关文章

网友评论

    本文标题:为什么不可以用Select * from table?

    本文链接:https://www.haomeiwen.com/subject/luyfuxtx.html