为什么要避免使用 select * ?

为什么要避免使用 select * ?


  1. 很少有需要同时获取所有字段数据的情况,此时使用 selec * 会将不需要的字段一并查出,浪费系统资源,降低查询效率。
  2. 可读性低(无法直观的知道查询是为了获取哪些数据)
  3. 更难使用到索引
    验证
    有tbl_student_card表:
    在这里插入图片描述
    在card_id、student_id字段上创建复合索引:
    CREATE INDEX idx_cardid_studentid ON tbl_student_card(card_id,student_id)
    在这里插入图片描述
    查询1:没有使用到索引
    在这里插入图片描述
    查询2:使用到idx_cardid_studentid索引
    在这里插入图片描述
    查询3:使用到idx_cardid_studentid索引
    在这里插入图片描述
    查询4:使用到idx_cardid_studentid索引
    在这里插入图片描述
    总结:假设当前查询的目的只是为了获取card_id和student_id字段的信息。直接写select * 确实省事,但是很难用到索引(下文说面如何select * 在什么情况下会使用到索引),查询的效率往往很低。

如何使 select * 使用到索引?
创建覆盖所有字段的索引:

CREATE INDEX idx_all ON tbl_student_card(card_id,student_id,card_no,issue_date,end_date,note)

在这里插入图片描述
验证:由于创建了覆盖所有字段的索引,select * 使用到了索引
在这里插入图片描述
总结:

  1. 创建覆盖所有字段的索引,索引文件会很大,查询性能下降
  2. 当查询的字段全部可以从某个索引的索引树获取,该查询就不会再从数据库表获取数据。
  3. 如果数据库表新增字段,select * 将再次无法使用到索引(因为刚才新建的idx_all索引并不包含该新增字段)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值