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#/
网友评论