关于数据库中查询的时候尽量不使用 select * from解释

举报
知识浅谈 发表于 2022/06/28 22:42:21 2022/06/28
【摘要】 简单的来理解就是select* 的时候弄不好就容易出错,所以不建议使用select * 更高层次的是下边摘自网络的原因 使用*无法利用index类型的单表查询。 select * from pers...

简单的来理解就是select* 的时候弄不好就容易出错,所以不建议使用select *

更高层次的是下边摘自网络的原因

  1. 使用*无法利用index类型的单表查询。
    select * from person where username = 'test’是不会走二级索引的,只能在聚集索引的那颗B+树上做全表扫描,也就是最慢的一种查询方式。
    当建立的是id和name 的两个索引,则会遵循最左前缀原则
    select id,name from person where id=12;

  2. 连接查询时,* 无法进入缓冲池
    mysql中连接查询的原理是先对驱动表进行查询操作,然后再用从驱动表得到的数据作为条件,逐条的到被驱动表进行查询。
    每次驱动表加载一条数据到内存中,然后被驱动表所有的数据都需要往内存中加载一遍进行比较。效率很低,所以mysql中可以指定一个缓冲池的大小,缓冲池大的话可以同时加载多条驱动表的数据进行比较,放的数据条数越多性能io操作就越少,性能也就越好。所以,如果此时使用select * 放一些无用的列,只会白白的占用缓冲空间。浪费本可以提高性能的机会。

文章来源: englishcode.blog.csdn.net,作者:知识浅谈,版权归原作者所有,如需转载,请联系作者。

原文链接:englishcode.blog.csdn.net/article/details/109637239

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。