select * 和select字段比较

1,573 阅读1分钟

在平时写业务代码中,为了简单或者使用方便,或者使用orm时,很容易直接或者间接去使用select *查询数据库数据。

那么select *到底有什么弊端,不推荐使用呢?

增加了网络带宽

这一点在查询表存在大字段的情况下显得尤为明显,大数据的传输必然会减缓传输的速度。

覆盖索引

当单表数据量随着业务增长变得比较庞大之后,全表扫描是不可接受的,我们会针对业务在表中增加一些索引,可以是单个字段组成索引,或者多个字段组成索引。

mysql中,索引和数据是存在一起的,如果查询的数据在索引上就能够找到,无需再根据索引上的位置信息二次扫描磁盘,减少IO次数,速度必然是去磁盘扫描快的多。覆盖索引就是说的查询字段完全属于构建索引的字段。因此,在使用select的时候尽可能的让搜索的字段是索引上的字段信息。

补充一点,select *select 全部字段 的查询速度相差不大,唯一区别是前者会先执行Query Table Metadata For Columns,一定程度上为数据库增加了负担。